即使没有发出预检请求,也会在POST请求中收到CORS错误

时间:2018-03-07 21:42:36

标签: angular google-chrome http cors

我实际上知道如何使用Access-Control-Allow-Origin标头来解决这个问题。但我很好奇为什么会发生这种情况,因为Chrome的网络标签上没有发送OPTIONS预检(也在Firefox中检查过)。我甚至可以在网络选项卡上看到完整的响应......所以这里是请求/响应信息:

常规

请求网址:http://localhost:8080/test/api/login

请求方法:POST

状态代码:200 OK

远程地址:[:: 1]:8080

推荐人政策:no-referrer-when-downgrade

请求标题

接受:application / json,text / plain, /

接受编码:gzip,deflate,br

接受语言:EN-US,EN; Q = 0.9

缓存控制:无缓存

连接:保活

的Content-Length:37

内容类型:文本/无格式

主机:本地主机:8080

产地:http://localhost:8100

杂注:无缓存

的Referer:http://localhost:8100/

User-Agent:Mozilla / 5.0(Windows NT 10.0; Win64; x64)AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 64.0.3282.186 Safari / 537.36

响应标头

的Content-Length:12

内容类型:应用/ JSON;字符集= UTF-8

日期:星期三,2018年3月7日21:32:52 GMT

服务器:Apache-狼/ 1.1

错误消息(Chrome控制台)

无法加载http://localhost:8080/po27/api/login:否'访问控制 - 允许 - 来源'标头出现在请求的资源上。起源' http://localhost:8100'因此不允许访问。

不要认为这很重要但是:请求是通过Angular 4的HttpService进行的

1 个答案:

答案 0 :(得分:1)

POST并不需要进行预检。在您的情况下,因为您正在使用'标准'请求标头,浏览器无法添加预检OPTIONS请求。

话虽如此,正如您明白的那样,如果没有将CORS响应标头添加到您的POST响应中,您将被阻止。