【发布时间】:2017-07-09 09:13:55
【问题描述】:
我有一个简单的 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>
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin: "http://myexamplefeed.com"
</IfModule>
我仍然收到CORS header ‘Access-Control-Allow-Origin’ does not match ‘(null)’ 错误。
不是 null 指的是 Header set Access-Control-Allow-Origin 值,我不应该能够在我的 .htaccess 文件中更改它吗?
更新:那是在 Firefox 中。在 Chrome 中,我收到以下消息:
“Access-Control-Allow-Origin”标头包含多个值 '*, *',但只允许一个
【问题讨论】:
-
本指南可能会有所帮助。 enable-cors.org/server_apache.html
-
如果您检查响应标头,我想您可能会发现响应中发送了多个
Access-Control-Allow-Origin响应标头。您可以使用 curl 在浏览器外部进行测试,如下所示:curl -i -H "Origin: http://sitethiserrorisoccurringon.com" http://myexamplefeed.com/feed/23213 -
错误消息的不同只是因为 Chrome 在尝试使用之前对 Access-Control-Allow-Origin 标头值进行了验证检查,而 Firefox 目前没有进行任何此类检查但只是尝试对标头值进行文字匹配(如果它有多个标记,则永远不会匹配任何东西)。
-
@sideshowbarker 果然,两个“Access-Control-Allow-Origin: *”响应头。奇怪的是,这是在从 .htacess 中注释掉该行之后。此外,在 /etc/httpd/conf/httpd.conf 中没有任何迹象!
-
@sideshowbarker FWIW,重复的响应标头出现在这些标头之后:“X-Powered-By: PHP/5.4.16”和“X-Powered-By: PleskLin”
标签: apache .htaccess cors cross-domain mod-headers