我想在我的xhr中添加标题。
当我使用setRequestHeader时,它实际上做的是向Access-Control-Request-Headers添加一个值。
如果我编码:
xhr.setRequestHeader('key1', 'value1');
xhr.setRequestHeader('key2', 'value2');
我在请求标头中看到的是: Access-Control-Request-Headers:accept,key1,key2
我希望看到的是:
key1:value1
key2:value2
如何防止这种合并? 谢谢!
答案 0 :(得分:5)
您正在制作一个非简单的跨域XMLHttpRequest(read more about CORS here),这意味着您的浏览器必须在您的预期请求之前发送预检(OPTIONS
)请求。这样做是为了与服务器验证允许来自不同来源的客户端发出所述请求。当您发出CORS请求时,浏览器会在发送请求时自动将Access-Control-Request
标头添加到请求中。
Access-Control-Request-Headers
标头是包含在请求中的非简单标头的逗号分隔列表。唯一的"简单"您可以设置的标头是:Accept
,Accept-Language
,Content-Language
,Last-Event-ID
和Content-Type
(如果设置为application/x-www-form-urlencoded
之一,multipart/form-data
或text/plain
)。
服务器必须响应预检请求中的Access-Control-Request
个标头,并在其响应中使用相应的Access-Control-Allow
标头。因此,在您的情况下,需要回复Access-Control-Allow-Headers: key1, key2
。