CORS 请求在 Firefox 中中止,而不是在 Chrome 或 IE 中
Posted
技术标签:
【中文标题】CORS 请求在 Firefox 中中止,而不是在 Chrome 或 IE 中【英文标题】:CORS Request Aborted in Firefox, not in Chrome or IE 【发布时间】:2015-11-19 17:35:28 【问题描述】:我正在使用 jQuery 进行跨域 ajax 请求。此请求在 Chrome 甚至 IE 中都可以正常工作。但是在 Firefox 中,预检 OPTIONS 总是被 Firefox 中止。此请求的目标服务器是 Apache,并且在 httpd-vhosts.conf 中启用了 CORS
更令人沮丧的是,Firefox 发出的第一个请求失败了。使用 F5 进行后续刷新 - ajax 调用 sometimes 完成。在 Firebug 中 - 我没有看到预检 OPTIONS 请求。我花了太长时间试图解决这个问题 - 非常感谢任何帮助。
<VirtualHost *:8443>
ServerName cyrsggisprd01.sgaas.gi-mss.com
SSLVerifyClient none
WSGIScriptAlias /svm_server D:\Apache24\htdocs\svm_server\adapter.wsgi
<Directory D:\Apache24\htdocs\svm_server>
Header always set Access-Control-Allow-Origin "*"
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS"
Header always set Access-Control-Max-Age "1000"
Header always set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, authorization, accept, client-security-token, session"
RewriteEngine On
RewriteCond %REQUEST_METHOD OPTIONS
RewriteRule .* / [R=200,L]
Require all granted
</Directory>
SSLEngine On
SSLCertificateFile D:\Apache24\ssl\server.crt
SSLCertificateKeyFile D:\Apache24\ssl\server.key
</VirtualHost>
【问题讨论】:
您需要提供更多信息。比如你提出什么样的要求。 【参考方案1】:我意识到这是一个老问题,但我有一个非常相似的问题,涉及 IIS 而不是 Apache 的不同设置,但我设法弄明白了。核心问题是 CORS、SSL 和不受信任的证书。
在我的例子中,CORS 客户端(它是一个从其自己的 URL 提供的 SPA)和服务器具有不受信任的证书,但是在 Firefox 中为客户端设置了一个例外,而不是服务器。这意味着 Firefox 成功加载了 SPA,但是 SPA 向服务器发出的任何 CORS 请求都在飞行前阶段被简单地中止,没有进一步的解释。我相信(但我尚未确认)Edge 会执行类似的操作,但出现以下错误:“网络错误 0x80070005,访问被拒绝”。
因此,基本上,请仔细检查您的服务器是否具有有效证书,并将您需要的任何例外添加到您的浏览器中。我在 Firefox 中所要做的就是手动访问服务器 URL 并添加一个异常,这样问题就消失了。这个简单的步骤很容易被忽略(尤其是在设置新的开发环境时),并且由于生成的错误消息具有误导性,因此调试起来非常令人沮丧。
【讨论】:
以上是关于CORS 请求在 Firefox 中中止,而不是在 Chrome 或 IE 中的主要内容,如果未能解决你的问题,请参考以下文章
在 Firefox 上,CORS 请求给出错误“:”(冒号)
当我在控制器功能中间中止或退出时,Ajax 请求被 Cors 阻止