美文网首页
跨域问题优雅解决(Apache)

跨域问题优雅解决(Apache)

作者: Swerve | 来源:发表于2021-08-23 14:58 被阅读0次

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

    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)

          本文链接:https://www.haomeiwen.com/subject/jwkliltx.html