首页 >web前端 >js教程 >如何在 AJAX POST 请求中包含自定义标头而不触发飞行前检查?

如何在 AJAX POST 请求中包含自定义标头而不触发飞行前检查?

Susan Sarandon
Susan Sarandon原创
2024-11-07 19:08:02549浏览

How do I include custom headers in an AJAX POST request without triggering a pre-flight check?

访问控制请求标头:了解飞行前检查

使用 jQuery 发出 AJAX POST 请求时,可以包含自定义标头来控制请求的行为。然而,了解访问控制请求标头 (CORS) 在跨源请求中的作用至关重要。

默认情况下,jQuery 在跨源请求前添加 OPTIONS 请求以启动预检检查。此检查可确保服务器允许原始请求中包含的特定 HTTP 方法和标头。在此飞行前检查期间,jQuery 会自动将 Access-Control-Request-Headers 标头添加到请求中,该标头指定原始请求中存在的自定义标头。

在提供的示例中:

$.ajax({
    ...
    headers: {
        "My-First-Header":"first value",
        "My-Second-Header":"second value"
    }
    ...
})

请求参数包含两个自定义标头。启动飞行前检查时,浏览器会自动将请求标头修改为以下内容:

...
Access-Control-Request-Headers: My-First-Header,My-Second-Header
...

这可确保服务器知道要包含在实际 POST 请求中的自定义标头。但是,自定义标头本身并不存在于飞行前检查请求中。

要将自定义标头包含在实际的 POST 请求中,您可以使用 beforeSend 函数,如下所示:

$.ajax({
    ...
    beforeSend: function(xhr) {
        xhr.setRequestHeader("My-First-Header", "first value");
        xhr.setRequestHeader("My-Second-Header", "second value");
    }
    ...
})

在这种情况下,自定义标头将直接包含在 POST 请求中,而不会触发飞行前检查。请注意,对于跨源请求,服务器必须在其 Access-Control-Allow-Headers 响应标头中显式允许指定的标头。

以上是如何在 AJAX POST 请求中包含自定义标头而不触发飞行前检查?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn