背景:
在使用 jQuery 的 AJAX POST 请求中,自定义标头可以添加以增强与服务器的通信。挑战在于观察自定义标头被添加到不太常见的“Access-Control-Request-Headers”标头中,而不是预期的标头中。
说明:
当浏览器将 AJAX 请求发送到与其发起的域不同的域时,浏览器首先发送一个“预检”请求(OPTIONS 方法)来检查服务器是否允许自定义标头。这样做是为了防止跨站脚本 (XSS) 攻击。
作为此预检请求的一部分,浏览器添加“Access-Control-Request-Headers”标头,其中列出了将要执行的自定义标头发送实际请求。服务器响应“204 No Content”状态代码和“Access-Control-Allow-Headers”标头,指定允许哪些自定义标头。
解决方案:
为了避免这种行为并直接在 POST 请求中设置自定义标头,您可以在 jQuery Ajax 调用的“beforeSend”函数中显式设置标头。这可确保在发送请求之前将标头添加到请求中,从而绕过预检请求过程。
以下是如何在 jQuery Ajax 调用中设置标头的示例:
$.ajax({ type: "POST", beforeSend: function(request) { request.setRequestHeader("Authority", authorizationToken); }, url: "entities", data: "json=" + escape(JSON.stringify(createRequestObject)), processData: false, success: function(msg) { $("#results").append("The result =" + StringifyPretty(msg)); } });
通过在“beforeSend”函数中设置标头,jQuery 会将“Authority”标头添加到实际的 POST 请求中,使您能够传递自定义标头并接收预期的服务器响应。
以上是如何避免在 jQuery AJAX POST 请求中的'Access-Control-Request-Headers”标头中设置自定义标头?的详细内容。更多信息请关注PHP中文网其他相关文章!