在对 Apache2 进行安全更新后,我的 CORS 请求开始失败。我不知道为啥。
Posted
技术标签:
【中文标题】在对 Apache2 进行安全更新后,我的 CORS 请求开始失败。我不知道为啥。【英文标题】:My CORS request started to fail after a security update to Apache2. I can't figure out why.在对 Apache2 进行安全更新后,我的 CORS 请求开始失败。我不知道为什么。 【发布时间】:2012-10-31 20:29:30 【问题描述】:直到昨天一切正常,并且已经运行了几个月。在提到 XSS 攻击预防的 apache 安全更新之后,它停止了工作。
我在这上面花了几个小时,不知道出了什么问题。正如您从下面的标题中看到的那样,Chrome 请求预检信息,apache 响应并且它们 chrome 说:
XMLHttpRequest 无法加载 http://neo.octomobi.com/plupload/upload_gallery.php。 Access-Control-Allow-Origin 不允许 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
【问题讨论】:
【参考方案1】:<?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>
【讨论】:
我已经尝试过了,但它不起作用。此外,如果您查看 apache 的响应标头,它已经包含 Access-Control-Allow-Origin: * 所以这不是问题。导致连接被拒绝的响应标头中必须缺少其他内容。【参考方案2】:经过多次尝试和错误,我得到了它的工作。
我从中了解到的是,由于某种原因,Apache 仅在预检请求中发送 Access-Control-Allow-Origin: *,而不是在实际请求中。它需要同时出现在预检和实际请求中,否则 CORS 失败。
即使我在 Apache 配置文件和 htaccess 中设置了 Header 设置 Access-Control-Allow-Origin: * 也会发生这种情况(顺便说一下,在我应用这个 Apache 补丁之前它一直在工作)。
所以我找到的解决方案是显式放置 header('Access-Control-Allow-Origin: *');在 PHP 返回。这并不理想,因为我必须修改很多文件才能包含它,我宁愿首先弄清楚它为什么停止工作。但至少它现在可以工作了。
【讨论】:
以上是关于在对 Apache2 进行安全更新后,我的 CORS 请求开始失败。我不知道为啥。的主要内容,如果未能解决你的问题,请参考以下文章
我的 Apache2 RewriteEngine On 和 AllowOverride All 更改是不是安全?
Apache2 H10292 自动更新后代理 UDS 文件名无效错误(Ubuntu 20.04)