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 中的主要内容,如果未能解决你的问题,请参考以下文章

从 HTTP 到 HTTPS 的跨域请求立即中止

在 Firefox 上,CORS 请求给出错误“:”(冒号)

当我在控制器功能中间中止或退出时,Ajax 请求被 Cors 阻止

提取工作在一个浏览器上,而不是在其他浏览器上

在完成之前中止请求时 Firefox 上的 NetworkError

为啥经过身份验证的 CORS 请求的预检 OPTIONS 请求在 Chrome 中有效,但在 Firefox 中无效?