WebKit浏览器不允许我设置CORS预检标题[复制]

问题描述 投票:7回答:1

这个问题已经在这里有一个答案:

我试图创建一个使用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);
    }
});

我期待这些头,让浏览器创建一个飞行前的请求(期权)与服务器进行协商。我知道,我以前也做到了这一点。谁能告诉我什么,我忘了?

非常感谢!

javascript jquery cors
1个回答
0
投票

预检请求选项自动呈现出一种横域请求的地方,如果请求不是一个简单的请求。一个简单的请求通常是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请求。

© www.soinside.com 2019 - 2024. All rights reserved.