跨域问题优雅解决(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或许可以使用反向代理解决,使用方案三的思路应该也可以。

你可能感兴趣的:(跨域问题优雅解决(Apache))