我正在使用jQuery.ajax
建立HTTP连接。在我的项目中,我想设置自定义http标头,但我只想发送我设置的那些。目前正在发送我的标题,但此外还有一些我未设置的其他标题。
这就是我添加自定义标题的方式:
$.ajax("http://fakedomain.foo", {headers: {header1: "value1", header2: "value2"}});
即使不能设置整个标题集合,但只添加额外的标题,我可能会很好。但即使在这种情况下,有时我的标题会在发送之前被修改。例如,如果我添加这些标题:
{
"Connection": "close",
"Accept-Encoding": "deflate, gzip",
"Accept": "text/plain",
}
然后这就是实际发送的内容(我用Wireshark捕获只是为了验证这一点)
{
"Connection": "close",
"Accept-Encoding": "gzip,deflate,sdch",
"Accept": "text/plain, */*; q=0.01",
"Accept-Language": "es-ES,es;q=0.8",
"Dnt": "1",
"Accept-Charset": "ISO-8859-1,utf-8;q=0.7,*;q=0.3",
...
}
正如你可以看到一些邪恶的gobling出现在调整我的标题,它已经将“sdch”编码添加到“Accept-Encoding”标题中,并且还更改了“Accept”标题以便它也接受 */*
。如果WS很挑剔并且需要根据标题采取不同的操作,这是一个真正的问题。
总结一下:
有没有办法只发送我的标题而没有额外的标题?
<击> 2。如果没有,有没有办法按原样添加我的自定义标题,而不修改它们?
更新:
我的不好,我没有正确设置标题。 (我发布的代码是正确的,但我的单元测试中有一个错误,所以我的标题实际上并没有被添加,而是默认的标题已被发送。修复后,我可以看到我的标题是使用正确的文本发送的,并没有修改。
所以忘了#2。问题#1仍然适用。
答案 0 :(得分:2)
规范(W3C,WHATWG)禁止覆盖某些标头,包括Accept-Encoding
。
有趣的是,规范没有说明Accept
的任何特殊内容,这意味着浏览器必须按照给定的方式使用它。在这种情况下,它是jQuery故障,其中adds that last part以防万一。
自6 years ago以来它就在那里。
规范还要求浏览器发送一些其他标头,例如Authorization
,Host
,Connection
,Keep-Alive
等。