发送带有自定义 HTTP 标头的跨域请求时禁用预检 OPTION 请求

Posted

技术标签:

【中文标题】发送带有自定义 HTTP 标头的跨域请求时禁用预检 OPTION 请求【英文标题】:Disable preflight OPTION request when sending a cross domain request with custom HTTP header 【发布时间】:2013-04-24 14:12:02 【问题描述】:

我刚刚发现我的浏览器在尝试使用自定义 http 标头进行跨域 ajax 调用时发送了一个额外的“OPTION”请求。 我想它被称为“预检请求”。

是否可以禁用此功能并仅发送初始请求?

这是我的 javascript 测试代码:

$(document).ready(function() 
    $.ajax(
        url: "http://google.fr",
        crossDomain: true,
        headers: 
            "X-custom-parameter": true
        
    );
);

感谢您的帮助!

【问题讨论】:

【参考方案1】:

不,绝对不可能绕过 CORS 预检请求。预检请求的存在是为了以安全的方式允许跨域请求。在上面的示例中,您尝试访问 google.fr,但 google.fr 不支持 CORS。谷歌没有办法解决这个问题,因为谷歌在其网页上不支持跨域请求。一般来说,如果您拥有服务器的所有权,您可以选择支持 CORS、支持 JSON-P 等替代跨域黑客攻击或使用服务器端代理。

【讨论】:

以上是关于发送带有自定义 HTTP 标头的跨域请求时禁用预检 OPTION 请求的主要内容,如果未能解决你的问题,请参考以下文章

如果我在使用 cors 时添加标准 http 标头,为啥会预检请求?

带有预检的 Node.JS 中的跨域 POST 请求?

带有自定义标头的跨域 jquery ajax api 调用未命中服务器

即使使用自定义标头,如何禁用预检请求

跨域 ajax 请求中的预检标头未解决授权标头

如何在 CORS 预检 OPTIONS 请求中发送自定义标头?