jquery – 如何在跨域(CORS)XMLHttpRequest中发送自定义标头?

我正在尝试发送一个JSON有效负载的CORS请求。我控制服务器和客户端。

在这里跟随:
https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS?redirectlocale=en-US&redirectslug=HTTP_access_control

服务器有一个自定义标头,必须与每个请求一起发送。因此,此自定义标头使请求“不简单”,因此请求必须使用OPTIONS请求进行预检。

我可以看到jquery发出OPTIONS请求,但它不会发送自定义标头。

方法我尝试过:

>使用beforeSend选项:http://api.jquery.com/jQuery.ajax/
>使用ajax预滤器:http://api.jquery.com/jQuery.ajaxPrefilter/

在这两种情况下,浏览器都不会发送自定义标头。

我正在使用FF 17.0.1,jquery 1.8.3。

解决方法

你的问题不在于jquery,它在 how CORS works.你的beforeSend回调可能正常工作……但浏览器不会在预检请求中发送自定义标题,无论如何。这是设计的;预检请求的目的是确定允许使用者(浏览器)发送的信息超出CORS规范中定义的“简单”内容。因此,对于useragent发送任何非简单数据(例如您的自定义标头)作为预检请求的一部分是弄巧成拙的。

要指示useragent在实际CORS请求中包含您的自定义标头,请在您的预检响应中包含Access-Control-Allow-Headers header。值得注意的是,如果您并不过分担心useragent传输的标头,我相信您可以回复Access-Control-Request-Headers请求标头字段的值作为Access-Control-Allow-的值您在回复中发送的标头。

您可能还希望包含syntax section of the spec中定义的其他一些Access-Control-Allow- *标头。

另见CORS – How do ‘preflight’ an httprequest?

另请参见Mozilla’s CORS preflight example,其中显示了这些标题的实际效果

相关文章

页面搜索关键词突出 // 页面搜索关键词突出 $(function () {...
jQuery实时显示日期、时间 html: <span id=&quot...
jQuery 添加水印 <script src="../../../.....
中文:Sys.WebForms.PageRequestManagerParserErrorExceptio...
1. 用Response.Write方法 代码如下: Response.Write(&q...
Jquery实现按钮点击遮罩加载,处理完后恢复 思路: 1.点击按...