我实际上知道如何使用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
杂注:无缓存
的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进行的
答案 0 :(得分:1)
POST并不需要进行预检。在您的情况下,因为您正在使用'标准'请求标头,浏览器无法添加预检OPTIONS请求。
话虽如此,正如您明白的那样,如果没有将CORS响应标头添加到您的POST响应中,您将被阻止。