Firefox CORS 跨域资源共享 飞行前调试

Posted

技术标签:

【中文标题】Firefox CORS 跨域资源共享 飞行前调试【英文标题】:Firefox CORS Cross Domain Resource Sharing Pre-Flight Debugging 【发布时间】:2013-01-07 04:22:38 【问题描述】:

我正在尝试让 Firefox 允许我为来自应用程序端口的数据发出 XmlHttpRequest。

我可以看到初始发送触发了一个 OPTIONS 消息,我已经使用 NetMon 捕获了这个,我可以看到 HTTP 字段...

OPTIONS /any.htm HTTP/1.1
Host: www.mysite.co.uk:10090
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Origin: http://www.mysite.co.uk
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type
Connection: keep-alive
Pragma: no-cache  
Cache-Control: no-cache

我以 OK 回应,告诉 FireFox 继续前进,并将 XHR 请求中的数据发送给我...

HTTP/1.1 200 OK
Access-Control-Allow-Methods: POST,-GET,-OPTIONS
Access-Control-Allow-Origin: *
Access-Control-Max-Age: 172800000
Server: Kawasu-OrderSub
Date: Wed, 23 Jan 2013 15:00:50 GMT

但是 POST 从未发送过,我认为这意味着 FireFox 对 200 OK 响应不满意。 POST 发送 Content-Type 为“application/json”的数据

我有 FireBug 并且 Net 选项卡有 XHR 按钮,但这只会在飞行前检查通过后显示 XHR。

主要问题:如何查看(和调试)FireFox 对服务器响应的不满意之处?

非常感谢您提前提供任何帮助。

【问题讨论】:

【参考方案1】:

您需要包含Access-Control-Allow-Headers: content-type 响应标头。这是因为请求带有Access-Control-Request-Headers: content-type 标头,并且该值需要包含在响应中。

【讨论】:

我会试一试,非常感谢您的回复,当我通过调整重建我的服务器端代码时会有更多反馈...... 不高兴。明天将尝试将请求限制为 CORS 术语中的“简单”(即删除指定的内容类型),以便不会触发飞行前检查。感谢您的意见。 删除了 Content-Type 作为一个选项,这很有效 - Firefox 不再预先发送请求,我又回到了球赛中。感谢您的帮助 Monsur。 额外:如果有人知道如何调试 Firefox 以查看为什么 OPTIONS 响应无法满足浏览器并允许 POST,请在此处添加。非常感谢! 我很惊讶 Firebug 没有显示预检信息。它显示在 Chrome 的网络检查器中。您没有提到这是否适用于 Chrome,但在 Chrome 中调试可能很有用。我会推荐一个 HTTP 检查器,例如 WireShark、Fiddler 或 Charles Proxy,以查看通过网络传输的实际 HTTP 请求/响应。

以上是关于Firefox CORS 跨域资源共享 飞行前调试的主要内容,如果未能解决你的问题,请参考以下文章

如何在浏览器的控制台中查看 CORS 飞行前 OPTIONS 请求?

在飞行前停止从 Firefox 到 Beego 服务器的 CORS 获取

Amazon S3 CORS(跨域资源共享)和 Firefox 跨域字体加载

Amazon S3 CORS(跨源资源共享)和Firefox跨域字体加载

调试 CORS 错误的方法

AWS API Gateway CORS 飞行前检查失败