1

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",
        ...
    }

正如你所看到的,一些邪恶的妖精正在调整我的标题,它已经将“sdch”编码添加到“Accept-Encoding”标题中,并且还更改了“Accept”标题,以便它也接受*/*. 如果 WS 很挑剔并且需要根据标头采取不同的操作,这将是一个真正的问题。

所以总结一下:

  1. 有没有办法只发送我的标题而不发送额外的标题?

    2. 如果没有,有没有办法在不修改它们的情况下添加我的自定义标题?


更新:
我的错,我没有正确设置标题。(我发布的代码是正确的,但是我的单元测试中有一个错误,所以我的标题实际上没有添加,而是发送了默认的。修复这个之后,我可以看到我的标题正在发送正确的文本,并且没有修改。所以忘记#2。问题#1仍然适用。

4

1 回答 1

2

规范(W3CWHATWG)禁止覆盖某些标头,包括Accept-Encoding.

有趣的是,规范并没有对Accept. 在这种情况下,这是 jQuery 的错误,它添加了最后一部分以防万一。它从6 年前就在那里了。

该规范还要求浏览器发送一些其他标头,例如AuthorizationHostConnectionKeep-Alive等。

于 2013-10-03T11:08:30.243 回答