微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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,其中显示了这些标题的实际效果

原文地址:https://www.jb51.cc/jquery/181614.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐