我正在尝试发送 JSON 负载的 CORS 请求。我控制服务器和客户端。
我在这里跟随:
服务器有一个自定义标头,必须与每个请求一起发送。因此,此自定义标头使请求“不简单”,因此必须使用 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,而在于CORS 的工作原理。您的 beforeSend 回调可能按预期工作...但无论如何,浏览器都不会在预检请求中发送自定义标头。这是设计使然;预检请求的目的是确定除了 CORS 规范中定义的“简单”内容之外,允许用户代理(浏览器)发送哪些信息。因此,对于用户代理来说,将任何非简单数据(例如您的自定义标头)作为预检请求的一部分发送是弄巧成拙的。
要指示用户代理将您的自定义标头包含在实际的 CORS 请求中,请包含Access-Control-Allow-Headers header在您的飞行前响应中。值得注意的是,如果您不太关心 useragent 传输的标头,我相信您可以只回显Access-Control-Request-Headers
请求头字段的值作为Access-Control-Allow-Headers
您发送回复。
您可能还想包括其他一些Access-Control-Allow-*
中定义的标头规范的语法部分.
也可以看看CORS - 如何“预检”http请求?
也可以看看Mozilla 的 CORS 预检示例,它显示了这些标头的实际作用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)