CORS:成功 OPTIONS 请求后,Firefox 不发送 POST 请求……在 Chrome 中有效

Posted

技术标签:

【中文标题】CORS:成功 OPTIONS 请求后,Firefox 不发送 POST 请求……在 Chrome 中有效【英文标题】:CORS: Firefox does not send POST Request after successful OPTIONS request … works in Chrome 【发布时间】:2014-09-07 11:47:09 【问题描述】:

我遇到了与this post 类似的问题,但最佳答案并没有帮助我。如果有人有任何其他想法,我将不胜感激。以下是请求:

请求标头

选项

Access-Control-Request-Method:  POST
Access-Control-Request-Headers: content-type,x-annotator-auth-token,x-csrftoken

响应标头

Access-Control-Max-Age: 3600
Access-Control-Allow-Origin:    http://localhost:8000
Access-Control-Allow-Methods:   GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS
Access-Control-Allow-Headers:   content-length, content-type, x-annotator-auth-token, x-requested-with, x-csrftoken
Access-Control-Allow-Credentials:   true

它返回状态码 200。实际请求包含内容长度、内容类型、x-annotator-auth-token 和 x-csrftoken,但没有获得状态码,就好像它从未触发过一样。再次感谢任何帮助!谢谢

【问题讨论】:

是否有可能链接到显示问题的测试用例?这将使这很容易确定.... 【参考方案1】:
response.addHeader("Access-Control-Allow-Origin", "*"); 

response.addHeader("Access-Control-Allow-Credentials","true");  

response.addHeader("Access-Control-Allow-Methods", "GET, PUT, POST, DELETE, OPTIONS");  
response.addHeader("Access-Control-Allow-Headers", "Content-Type, X-Experience-API-Version,Authorization");  
//add this into your response header and it will work

【讨论】:

这里必须明确设置原点。

以上是关于CORS:成功 OPTIONS 请求后,Firefox 不发送 POST 请求……在 Chrome 中有效的主要内容,如果未能解决你的问题,请参考以下文章

Preflight(options) 请求的正确成功状态代码是啥? [复制]

在 IdentityServer3 中处理 CORS 之前发送的飞行前 OPTIONS 请求

Domino、CORS 和 OPTIONS 请求

401 响应 CORS preflight OPTIONS 请求到 Spring Boot 服务器

cors / ajax 请求的重复 OPTIONS 请求

CORS:为啥我的浏览器不发送 OPTIONS 预检请求?