我的 CORS 请求在对 Apache2 进行安全更新后开始失败。我不知道为什么。


直到

昨天一切都在工作,而且已经工作了几个月。在提到XSS atacks预防的apache安全更新之后,它停止了工作。

我花了几个小时在这上面,不知道出了什么问题。从下面的标题中可以看出,Chrome 请求预检信息,apache 响应,他们 chrome 说:

XMLHttpRequest 无法加载 http://neo.octomobi.com/plupload/upload_gallery.php。访问控制允许原 http://www.octomobi.com

不允许源。

有什么想法吗?阿帕奇对飞行前的回答有什么问题??

Request URL:http://neo.xxx.com/xxxx/xxxx (domain hidden by me for security)
Request Method:OPTIONS
Status Code:200 OK

请求标头

Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-GB,en-US;q=0.8,en;q=0.6
Access-Control-Request-Headers:origin, content-type
Access-Control-Request-Method:POST
Host:neo.xxxx.com
Origin:http://www.xxxx.com (hidden by me)
Proxy-Connection:keep-alive
Referer:http://www.xxxx.com/xxx/xxxx (hidden by me)
User-Agent:Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11

响应标头

Access-Control-Allow-Headers:Content-Type
Access-Control-Allow-Origin:*
Allow:GET,HEAD,POST,OPTIONS
Connection:Keep-Alive
Content-Length:0
Content-Type:text/html
Date:Mon, 12 Nov 2012 11:47:17 GMT
Keep-Alive:timeout=5, max=100
Proxy-Connection:Keep-Alive
Server:Apache/2.2.20 (Ubuntu)
Via:1.1 FTHW937X
X-Powered-By:PHP/5.3.6-13ubuntu3.9
<?php header('Access-Control-Allow-Origin: *'); ?>

你可以把标题集访问控制允许原点*设置放在阿帕奇会议或htaccess文件上,它只是工作或执行以下操作

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

经过大量的试验和错误,我让它工作了。

我从中了解到,出于某种原因,Apache仅在预检请求中发送访问控制-允许-来源:*,而不是在实际请求中。它需要同时存在于预检和实际请求中,否则 CORS 将失败。

即使我在 Apache 配置文件和 htaccess 中设置了标头集 Access-Control-Allow-Origin:*(顺便说一下,在我应用这个 Apache 补丁之前它一直在工作),这种情况也会发生。

所以我找到的解决方案是显式地将header('Access-Control-Allow-Origin: *')放在PHP返回中。这并不理想,因为我必须修改很多文件才能包含它,我宁愿弄清楚它首先停止工作的原因。但至少它现在正在工作。

相关内容

  • 没有找到相关文章

最新更新