javascript - Webkit 浏览器不允许我设置 CORS 预检 header

标签 javascript jquery cors

<分区>

我正在尝试使用 jQuery.ajax() 创建跨源 GET 请求。我的服务器配置为接受此类请求。 Chrome 不允许我发送 header :

Access-Control-Request-Method

Access-Control-Request-Headers

Refused to set unsafe header "Access-Control-Request-Method" <- error message

这是我的 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);
    }
});

我原以为这些 header 会导致浏览器创建飞行前请求 (OPTIONS) 以与服务器协商。我知道我以前已经做到了这一点。谁能告诉我我忘记了什么?

非常感谢!

最佳答案

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

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

如果您的服务器在响应中有正确的“访问控制” header ,也就是说,是的,允许此客户端发出跨域 POST 请求,然后浏览器将继续发出 POST 请求。如果您的服务器拒绝(因为您服务器上的“访问控制” header 错误),那么浏览器将尊重它并且不会发出第二个 POST 请求。

参见 https://www.html5rocks.com/en/tutorials/cors/#toc-handling-a-not-so-simple-request了解更多信息。

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

关于javascript - Webkit 浏览器不允许我设置 CORS 预检 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17901702/

相关文章:

javascript - 如何使用 bootstrap collapse 获取消息正文的第一行作为消息标题

javascript - jQuery 选择符合条件的表

javascript - 制作带点的输入字段掩码

javascript - 无法根据使用jquery的添加方法动态显示不同的内容

php - 使用ajax将行添加到表的末尾

javascript - 如何使 Bootstrap 下拉菜单的整个导航栏元素可点击?

ruby-on-rails - Rails 乘客 Glyphicon CORS Cloudfront NGINX 问题

c# - raspbian 上的单一服务 WCF 选项

javascript - react 连接到 Node Cors 预检失败

javascript - 将鼠标悬停在容器 div 上会显示隐藏的 div。当光标放在隐藏的 div 上时,容器 div 的行为发生变化