【发布时间】:2013-07-27 22:11:28
【问题描述】:
我正在尝试使用 jQuery.ajax() 创建一个跨源 GET 请求。我的服务器配置为接受此类请求。 Chrome 不允许我发送标头:
访问控制请求方法
访问控制请求标头
拒绝设置不安全的标头“Access-Control-Request-Method”
这是我的 ajax 请求:
$.ajax({
type:"GET",
headers: {
'Access-Control-Request-Method' : 'GET',
'Access-Control-Request-Headers': 'X-Custom'
},
url: "http://localhost:3000",
success: function(msg) {
console.log(msg);
}
});
我希望这些标头会导致浏览器创建一个飞行前请求 (OPTIONS) 以与服务器进行协商。我知道我以前已经做到了。谁能告诉我我忘记了什么?
非常感谢!
【问题讨论】:
-
将
Access-Control-Expose-Headers设置为任意值,例如x-json -
什么?那不是我要发送的标题。能详细点吗?
-
这是一种解决方法。您会看到,当您要发出跨域请求时,会建立预检请求。预检将检查服务器是否有可用的
OPTIONS,并返回相应的标头。在预检完成之前,请求不会在基于 webkite 的浏览器中解析,以避免跨站点伪造。 You can read more about it here -
我知道什么是 CORS 以及预检请求是如何工作的。我不明白为什么要发送 Access-Control-Expose-Headers 标头。 Webkit 是否有不允许标准 CORS 标头的补丁?
-
@Nick - 你能用你最终设置的内容更新你的代码吗?
标签: javascript jquery cors