【发布时间】:2013-03-08 21:14:56
【问题描述】:
我们正在向本地运行的服务器发布 AJAX 请求,即
xhr.open("POST", "http://localhost:9000/context/request");
xhr.addHeader(someCustomHeaders);
xhr.send(someData);
这个 javascript 正在执行的页面也是从 localhost:9000 提供的,也就是说,这看起来完全像一个同源请求。
但是,由于某种原因,谷歌浏览器总是在结果请求中设置一个 Origin 标头,导致我们的服务器基于错误假设它是 CORS 请求而阻止该请求。
这在 Firefox 中不会发生。
此外,Firefox 和 Chrome 都没有发送 OPTIONS 预检请求,这令人困惑;为什么在没有预先检查的情况下设置 Origin 标头以确保服务器允许 Origin 和 Custom 标头?
有谁知道这种情况下发生了什么?我们是否误解了 CORS 规范?
【问题讨论】:
-
请参阅seclab.stanford.edu/websec/csrf/csrf.ppt,它回答了为什么 Origin 标头适用于同源 POST 请求。是一种CSRF保护机制。
标签: javascript ajax html google-chrome cors