我对CORS有一个奇怪的问题。我正在从一个文件发出请求,我的问题今天开始,在它工作之前(它仍在使用firefox)。但是在chrome上我遇到了一个问题,它说服务器端不允许'null'来源。但它是如果我检查网络,我可以看到:
Highcharts.chart('container', {
yAxis: {
min: -1,
max: 4,
plotLines: [{
value: 0,
color: 'black',
width: 2,
zIndex: 3
}],
},
series: [{
data: [1, 2, 3]
}]
});
'somePasswordHere'我在发布之前就已经修改了它实际上是基本身份验证中的用户名和密码。
奇怪的是,我在Chrome控制台上得到了这个:Response
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: accept, content-type
Access-Control-Allow-Methods: PUT, DELETE, POST, GET, OPTION
Access-Control-Allow-Origin: null
Connection: close
Content-Length: 21
Content-Type: application/json
Date: Thu, 29 Mar 2018 10:10:53 GMT
Request
Accept: application/json, text/plain, */*
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Authorization: Basic somePasswordHere
Connection: keep-alive
Host: localhost:8080
Origin: null
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36
如果我检查我的服务器,我可以看到我从空原点获得请求,并且我允许它我可以看到有凭据和东西,并且确实正确处理了实际的cal,但在chrome方面,我得到这个反正消息。
奇怪的是它可以在firefox上运行(通常是相反的)。
有什么想法吗?我是否必须为chrome或其他东西添加另一个标题?
PS:我可以看到昨天更新了chrome,所以它可能已经破坏了一些东西。
PS2:网络标签中的“响应预览”中的另一个奇怪的事情我实际上可以看到内容是正确的并且它就在那里......但是消息'来源提供的不同于......'仍然存在问题吗?
答案 0 :(得分:1)
null
被解释为文字主机源(地址),不应放入Origin
标头。此标头应包含从中开始请求的主机名。
出于同样的原因,如果您想允许所有来源,请尝试将*
而不是null
放入响应的Access-Control-Allow-Origin
标题中。
如您所知,每个CORS请求实际上由两个请求组成:预检请求(始终发送)和实际请求(仅在预检请求成功时发送).Maybe Chrome会将null
视为特殊关键字,而不是主机名,并会阻止该请求。 Firefox可能会更宽松,并且理解预期的行为。
答案 1 :(得分:0)
我找到了答案,
在阅读了一些关于科尔斯的文章之后,我发现了“无效”这一点。起源souldn在firefox上工作。浏览器在将其发送到服务器之前隐藏原点,因此它实际上并非“无效”。但是' file://'。
所以正确的方法是允许' null'文件的来源是:'Access-Control-Allow-Origin' : 'file://'
这很有效。
我不知道为什么Chrome现在才决定这样做,他们让我的应用程序工作了好几个月。无论如何,随着这种变化,我恢复正常。