即使没有发出预检请求,也会在 POST 请求中出现 CORS 错误
Posted
技术标签:
【中文标题】即使没有发出预检请求,也会在 POST 请求中出现 CORS 错误【英文标题】:Getting a CORS error in a POST request even without a preflight request being issued 【发布时间】:2018-08-16 03:11:03 【问题描述】:我确实知道如何使用 Access-Control-Allow-Origin 标头解决这个问题。但我很好奇为什么会发生这种情况,因为在 Chrome 的“网络”选项卡上没有发送 OPTIONS 预检(也在 Firefox 中检查)。我什至可以在网络选项卡上看到完整的响应...所以这里是请求/响应信息:
一般:
请求网址:http://localhost:8080/test/api/login
请求方法:POST
状态码:200 OK
远程地址:[::1]:8080
Referrer Policy:no-referrer-when-downgrade
请求标头:
Accept:application/json, text/plain, /
接受编码:gzip、deflate、br
Accept-Language:en-US,en;q=0.9
缓存控制:无缓存
连接:保持活动状态
内容长度:37
内容类型:文本/纯文本
主机:本地主机:8080
来源:http://localhost:8100
Pragma:no-cache
推荐人:http://localhost:8100/
用户代理:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/64.0.3282.186 Safari/537.36
响应标头:
内容长度:12
Content-Type:application/json;charset=UTF-8
日期:格林威治标准时间 2018 年 3 月 7 日星期三 21:32:52
服务器:Apache-Coyote/1.1
错误信息(Chrome 的控制台):
无法加载http://localhost:8080/po27/api/login:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此不允许访问 Origin 'http://localhost:8100'。
不要认为这很重要,但是:请求是使用 Angular 4 的 HttpService 发出的
【问题讨论】:
【参考方案1】:POST 本身不需要预检。在您的情况下,由于您正在使用“标准”请求标头进行 POST,因此浏览器不会添加预检 OPTIONS 请求。
话虽如此,正如您显然理解的那样,如果不将 CORS 响应标头添加到您的 POST 响应中,您将被阻止。
【讨论】:
以上是关于即使没有发出预检请求,也会在 POST 请求中出现 CORS 错误的主要内容,如果未能解决你的问题,请参考以下文章
如何在 django 的预检 CORS POST 请求中处理 CSRF?
如何从另一个来源访问 url?即使存在 Access-Control-Allow-* 标头,预检请求也会返回 401
Firebase 的云功能 - 即使我正在为 firebase-admin 功能发出出站 http 请求,也会出现网络错误