即使没有发出预检请求,也会在 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 请求,也会出现网络错误

即使标题正确,POST 调用也会返回 CORS 错误

为啥即使未启用 CORS,HTTP 请求也会在 Action 中处理? [复制]

即使使用自定义标头,如何禁用预检请求