jan*_*oth 18 javascript ajax html5 google-chrome cors
我们正在向本地运行的服务器发布一个AJAX请求,即
xhr.open("POST", "http://localhost:9000/context/request");
xhr.addHeader(someCustomHeaders);
xhr.send(someData);
Run Code Online (Sandbox Code Playgroud)
正在执行此javascript的页面也是从localhost:9000提供的,即这看起来像是一个同源请求.
但是,出于某种原因,Google Chrome总是在生成的请求中设置一个Origin标头,导致我们的服务器根据它的CORS请求的错误假设来阻止请求.
这在Firefox中不会发生.
此外,Firefox和Chrome都没有发送OPTIONS预检请求,这令人困惑; 为什么在没有首次预检的情况下设置Origin标头以确保服务器允许Origin和Custom标头?
有谁知道在这种情况下发生了什么?我们是否误解了CORS规范?
mon*_*sur 29
Chrome和Safari Origin在同源POST/PUT/DELETE请求中包含标题(同源GET请求不具有Origin标头).Firefox不包含Origin同源请求的标头.浏览器不期望同源请求上的CORS响应头,因此对同源请求的响应将发送给用户,无论它是否具有CORS头.
我建议检查Host标头,如果它与标头中的域匹配Origin,请不要将请求视为CORS.标题看起来像这样:
Host: example.com
Origin: http://example.com
Run Code Online (Sandbox Code Playgroud)
注意,Origin将具有方案(http/https),域和端口,而Host只有域和端口.
Vla*_*nov 14
根据RFC 6454 - Web Origin Concept - Origin的存在实际上对任何HTTP请求都是合法的,包括同源请求:
http://tools.ietf.org/html/rfc6454#section-7.3
"用户代理可以在任何HTTP请求中包含Origin头字段."
| 归档时间: |
|
| 查看次数: |
24710 次 |
| 最近记录: |