Webkit浏览器不允许我设置CORS预检标头

时间:2013-07-27 19:33:56

标签: javascript jquery cors

我正在尝试使用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)。我知道我之前已经完成了这个。有人能告诉我我忘了什么吗?

非常感谢!

1 个答案:

答案 0 :(得分:0)

如果请求不是简单请求,则会在跨域请求上自动发生PREFLIGHT选项请求。简单的请求通常是GET请求。因此,如果您进行跨域GET请求,则不会有预检OPTIONS请求。

但是,如果您发出跨域POST请求,浏览器将在没有您指示的情况下执行此操作,首先进行预检OPTIONS请求。此请求的目的是查看服务器是否允许来自客户端域/ IP的跨域POST请求。

如果您的服务器具有正确的" Access-Control"响应中的标头,也就是说,是的,允许此客户端发出跨域POST请求,然后浏览器将继续发出POST请求。如果您的服务器显示NO(因为服务器上的" Access-Control"标头错误),则浏览器会尊重该服务器并且不会发出第二个POST请求。

有关详细信息,请参阅https://www.html5rocks.com/en/tutorials/cors/#toc-handling-a-not-so-simple-request

此外,您必须确保将服务器设置为处理传入的OPTIONS请求。