CORS:在成功的 OPTIONS 请求后,Firefox 不发送 POST 请求......适用于 Chrome 和 IE
Posted
技术标签:
【中文标题】CORS:在成功的 OPTIONS 请求后,Firefox 不发送 POST 请求......适用于 Chrome 和 IE【英文标题】:CORS: Firefox does not send POST Request after successful OPTIONS request ... works in Chrome and IE 【发布时间】:2014-01-18 05:50:35 【问题描述】:这适用于 Chrome 和 IE,但不适用于 Firefox(26)。
OPTIONS 请求返回状态 200,但 Firefox 并没有像 Chrome 和 IE 那样发送后续的 POST 请求。
请求标头 选项.. 访问控制请求标头:内容类型 访问控制请求方法:POST
响应标头安全 访问控制允许凭据:true Access-Control-Allow-Headers:X-File-Upload 内容类型 访问控制允许方法:POST OPTIONS 访问控制允许来源:*
IE 和 Chrome 都发送后续 POST 方法,一切正常,但 Firefox 不发送 POST 请求。我知道这一点是因为 (a) 我在 Firefox 调试器中检查了网络流量,并且 (b) 服务器没有收到 POST 请求。
不确定这是否相关,但这里有一些附加信息: X-File-Upload 是我正在使用的商业 jQuery 文件上传包所需的自定义标头 我正在使用 jQuery ajax 发出 POST 请求
这是 Firefox 的错误还是我做错了什么?我怎么去调试这个??
非常感谢任何帮助或见解。提前致谢。
【问题讨论】:
***.com/questions/24789416/… 【参考方案1】:允许的标头/方法列表/ ...必须用逗号分隔,而不是空格:
Access-Control-Allow-Headers: X-File-Upload, content-type
Access-Control-Allow-Methods: POST, OPTIONS
虽然对于您当前的用例可能没有问题,但您还应该查看以下两个标题:
Access-Control-Allow-Credentials:true
Access-Control-Allow-Origin:*
要么删除 Access-Control-Allow-Credentials: true
,要么设置非通配符 Access-Control-Allow-Origin
响应标头(例如 http://example.com
),因为当使用通配符来源时,您无法共享凭据。 "The string "*" cannot be used for a resource that supports credentials."
【讨论】:
效果很好。谢谢!仅供参考,响应中根本不需要“内容类型”值。将“发布选项”更改为“发布,选项”有效。因此,除非发生其他事情,Chrome 和 IE 并不关心用逗号分隔的值。以上是关于CORS:在成功的 OPTIONS 请求后,Firefox 不发送 POST 请求......适用于 Chrome 和 IE的主要内容,如果未能解决你的问题,请参考以下文章
Preflight(options) 请求的正确成功状态代码是啥? [复制]
在 IdentityServer3 中处理 CORS 之前发送的飞行前 OPTIONS 请求
401 响应 CORS preflight OPTIONS 请求到 Spring Boot 服务器