javascript – Webkit浏览器不允许我设置CORS预检标题

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

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);
    }
});

我期待这些标题导致浏览器创建一个与服务器协商的飞行前请求(OPTIONS).我知道我之前已经完成了这个.有人能告诉我我忘记了什么吗?

非常感谢!

解决方法

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

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

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

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

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

相关文章

kindeditor4.x代码高亮功能默认使用的是prettify插件,prett...
这一篇我将介绍如何让kindeditor4.x整合SyntaxHighlighter代...
js如何实现弹出form提交表单?(图文+视频)
js怎么获取复选框选中的值
js如何实现倒计时跳转页面
如何用js控制图片放大缩小