rq_*_*rq_ 22 firefox cors fetch-api
我正在使用凭据和预检请求实现CORS,我有点不知道为什么预检请求在Firefox 30中始终失败但在Safari(7.0.2)和Chrome 35中有效.我认为这个问题与" 为什么会这样做有所不同" 经过身份验证的CORS请求的预检OPTIONS请求在Chrome中运行但不在Firefox中运行? "因为我没有收到401,而是来自浏览器客户端的特定于CORS的消息:
"跨源请求被阻止:同源策略不允许在http://myurl.dev.com上读取远程资源.这可以通过将资源移动到同一域或启用CORS来解决."
没有显示源代码,这就是我正在做的事情:
在服务器上:
OPTIONS响应的标题:
POST响应的标题:
在浏览器客户端中:
jQuery.ajax({
url: requestUrl,
type: 'POST',
data: getData(),
xhrFields: {
withCredentials: true
}
});
Run Code Online (Sandbox Code Playgroud)
根据规范,这将触发OPTIONS预检请求,该请求需要在其响应中具有CORS头.我已经多次阅读过W3C规范了,在预检响应中我无法确定我做错了什么,如果有的话.
der*_*783 90
问题: “为什么此 CORS 请求仅在 Firefox 中失败?”
解答: 虽然与 OP 的具体情况无关,但它可能会帮助您了解 Firefox 默认情况下不信任 Windows 证书存储中的 CA(证书颁发机构),这可能会导致 Firefox 中的 CORS 请求失败(正如Svish 在问题评论中)。
要允许 Firefox 信任 Windows 证书存储中的 CA:
about:config在 Firefox 中,在地址栏中输入security.enterprise_roots.enabled名称将值设置为trueAnn*_*nne 10
请注意,Firefox是唯一符合此处的浏览器.如果Access-Control-Allow-Methods根据https://fetch.spec.whatwg.org/#cors-preflight-fetch解析失败,则需要返回网络错误.并且根据标题值的ABNF,它绝对是逗号分隔值.
从Firefox 87(2021 年 3 月发布)开始,可以在about:config(即 Firefox 配置编辑器)中设置以下首选项:
network.cors_preflight.allow_client_cert: true
Run Code Online (Sandbox Code Playgroud)
来自Firefox Enterprise 87 - 发行说明:
使用 TLS 客户端证书的公司可以翻转
network.cors_preflight.allow_client_cert首选项,以获得与 Google Chrome 兼容的 CORS 协议处理。特别是,与 Fetch 标准相反,这将传输 TLS 客户端证书以及 CORS 预检。有关详细信息,请参阅错误 1511151 。