这个问题已经在这里有一个答案:
我试图创建一个使用jQuery.ajax()跨起源GET请求。我的服务器被配置为接受这样的请求。 Chrome浏览器不会允许我发送头:
访问控制请求法
访问控制请求报头
拒绝设置不安全头“访问控制请求-方法” < - 错误消息
这里是我的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);
}
});
我期待这些头,让浏览器创建一个飞行前的请求(期权)与服务器进行协商。我知道,我以前也做到了这一点。谁能告诉我什么,我忘了?
非常感谢!
预检请求选项自动呈现出一种横域请求的地方,如果请求不是一个简单的请求。一个简单的请求通常是GET请求。因此,如果你犯了一个跨域GET请求也不会有预检OPTIONS请求。
但是,如果你犯了一个跨域POST请求,浏览器会,没有你指示它这样做,让预检OPTIONS请求第一。这一要求的目的是查看服务器是否允许从客户端的域/ IP跨域POST请求。
如果您的服务器在响应正确的“访问控制”头,那说,是的,这允许客户端进行跨域POST请求,那么浏览器就会着手进行POST请求。如果你的服务器说NO(因为你的服务器上的“访问控制”标头是错误的),那么浏览器就会尊重,不会使第二POST请求。
见https://www.html5rocks.com/en/tutorials/cors/#toc-handling-a-not-so-simple-request获取更多信息。
此外,你必须确保你的服务器设置为处理传入OPTIONS请求。