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

moo*_*eds 23 jquery xmlhttprequest options cors

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

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

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

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

方法我尝试过:

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

我正在使用FF 17.0.1,jquery 1.8.3.

bro*_*ofa 32

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

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

您可能还希望包含规范语法部分中Access-Control-Allow-*定义的一些其他标头.

另请参阅CORS - 如何"预检"httprequest?

另请参阅Mozilla的CORS预检示例,该示例显示了这些标头的实际应用.