跨域问题优雅解决(Apache)

方案一:直接在域名配置中增加*

Header set Access-Control-Allow-Origin * 

缺点:安全性缺失。公交车,谁都能访问。相当于完全放弃跨域控制。
且无法发送登陆凭证,发送cookie等依然会被拦截

方案二:php中增加跨域设置

$origin = isset($_SERVER['HTTP_ORIGIN']) ? $_SERVER['HTTP_ORIGIN'] : "*";
header('Access-Control-Allow-Origin:' . $origin);
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Headers: Content-Type, X-Requested-With, Cache-Control,Authorization");

优点:可以根据白名单来开启是否跨域。发送cookie等凭证不会被拦截
缺点:文件等静态文件不经过php处理,依然会被跨域拦截
上述代码没有加白名单,需要的自己加

方案三:.htaccess中添加设置

SetEnvIf Origin "^http(s)?://(.+\.)?(submit.magazine.ubandev.com|localhost:8080)$" origin_is=$0
Header always set Access-Control-Allow-Origin %{origin_is}e env=origin_is
Header set Access-Control-Allow-Credentials true

有点:无需修改apache域名配置。静态文件也可设置响应头,可以跨域。正则之后响应头只有一个域名,可以发送cookie

总结

推荐使用方案三,几乎完美解决跨域中遇到的所有问题。nginx或许可以使用反向代理解决,使用方案三的思路应该也可以。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容