2

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

我花了几个小时在这上面,不知道出了什么问题。正如您从下面的标题中看到的那样,Chrome 请求预检信息,apache 响应并且它们 chrome 说:

XMLHttpRequest 无法加载http://neo.octomobi.com/plupload/upload_gallery.php。Access-Control-Allow-Origin 不允许来源http://www.octomobi.com 。

有任何想法吗?apache对预检的回答有什么问题?

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
4

2 回答 2

0
<?php header('Access-Control-Allow-Origin: *'); ?>

您可以将 Header set Access-Control-Allow-Origin * 设置在 apache conf 或 htaccess 文件上,它就可以工作或者执行以下操作

<ifModule mod_headers.c>
    Header set Access-Control-Allow-Origin: *
</ifModule>
于 2012-11-12T12:01:21.727 回答
0

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

我从中了解到的是,由于某种原因,Apache 仅在预检请求中发送 Access-Control-Allow-Origin: * ,而不是在实际请求中。它需要同时出现在预检和实际请求中,否则 CORS 失败。

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

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

于 2012-11-12T22:14:04.690 回答