请求标头不适用于跨域Ajax

时间:2012-12-23 14:26:37

标签: javascript jquery ajax

我正在尝试在请求标头中添加一个参数,它适用于同域调用,但如果我调用另一个域(API),我需要更改标头参数本身。

这是我尝试添加参数的代码。

jqXHR.setRequestHeader(
  "Authorization", 'bearer t-7614f875-8423-4f20-a674-d7cf3096290e'
);

应该是这样的

Authorization: bearer t-3e57cc74-3e7a-4fc7-9bbb-f6c83252db01
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11
Accept: */*
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

但对于跨域调用,它变成了这样:

Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Access-Control-Request-Headers  authorization
Access-Control-Request-Method   GET

任何人都可以告诉我如何解决跨域调用问题吗?

1 个答案:

答案 0 :(得分:2)

您需要实现CORS的"preflighting"部分,因为您使用自定义标头。在MDN上有一个很好的文档。

您基本上需要处理HTTP OPTIONS请求并使用正确的标头进行响应,以指示客户端允许该请求。如果您只想允许所有带有Authorization标头的GET请求,则以下响应标头将完成此任务:

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET
Access-Control-Allow-Headers: authorization