CORS标头'Access-Control-Allow-Origin'与'(null)'不匹配,但它不为空

时间:2017-02-20 07:24:19

标签: apache .htaccess cors cross-domain mod-headers

我有一个简单的AJAX请求,可以调用http://myexamplefeed.com/feed/23213

我刚将此网站移至新服务器,突然之间我收到了此错误:

  

阻止跨源请求:同源策略禁止读取   http://myexamplefeed.com/feed/23213处的远程资源。 (原因:   CORS标题'Access-Control-Allow-Origin'与'(null)'不匹配。

问题是,在我的.htaccess文件中,我试图匹配*:

<IfModule mod_headers.c>
  Header set Access-Control-Allow-Origin: *
</IfModule>

http://myexamplefeed.com

<IfModule mod_headers.c>
  Header set Access-Control-Allow-Origin: "http://myexamplefeed.com"
</IfModule>

我仍然收到CORS header ‘Access-Control-Allow-Origin’ does not match ‘(null)’错误。

引用Header set Access-Control-Allow-Origin值不是null,我不能在.htaccess文件中更改它吗?

更新:那是在Firefox中。在Chrome中,我收到此消息:

  

'Access-Control-Allow-Origin'标头包含多个值'*,   *',但只允许一个

3 个答案:

答案 0 :(得分:2)

尝试:

<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
</IfModule>

答案 1 :(得分:1)

这有点晚了,但对于那些想要支持多个域的人来说,这可以通过一些额外的配置来实现。我不建议在少数域之外这样做。这将适用于 Apache 2.4+

<IfModule mod_setenvif.c>
    SetEnvIfExpr "(tolower(req('Origin')) == 'https://prod.someschool.edu')" isProd
    SetEnvIfExpr "(tolower(req('Origin')) == 'https://dev.someschool.edu')" isDev

    <IfModule mod_headers.c>
        Header always set Access-Control-Allow-Origin "https://prod.someschool.edu" env=isProd
        Header always set Access-Control-Allow-Origin "https://dev.someschool.edu" env=isDev
    </IfModule>
</IfModule>

答案 2 :(得分:0)

对不起,但是不允许在Access-Control-Allow-Origin上使用多个值。要么使用通配符&#34; *&#34;或使用单个域名。

另一种方法是执行一个小脚本并根据请求的来源更改该值,并将其与可用域列表进行比较。

相关问题