$.ajax:如何覆盖默认的http标头
$.ajax: How to override default http headers
我正在使用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"编码添加到"接受编码"头上,还改变了"接受"头,以便它也接受*/*
。如果 WS 很挑剔并且需要根据标头采取不同的操作,这是一个真正的问题。
所以总结一下:
有没有办法只发送我的标题而不发送额外的标题?
2.如果没有,有没有办法按原样添加我的自定义标题,而无需对其进行修改?
更新:
我的错,我没有正确设置标题。(我发布的代码是正确的,但是我的单元测试中存在一个错误,因此实际上没有添加我的标头,而是发送了默认标头。修复此问题后,我可以看到我的标题是使用正确的文本发送的,并且没有修改。所以忘记#2。问题#1仍然适用。
规范(W3C,WHATWG(禁止覆盖某些标头,包括Accept-Encoding
。
有趣的是,该规范并没有说任何关于Accept
的特殊之处,这意味着浏览器必须按照给定的方式使用它。在这种情况下,是jQuery出了问题,为了以防万一,它添加了最后一部分。它从 6 年前就在那里。
该规范还要求浏览器发送一些其他标头,例如Authorization
、Host
、Connection
、Keep-Alive
等。
- 用嵌套函数和默认函数定义函数
- Meteor如何接收HTTP请求
- 如何使用铁流星与流星的默认路线
- 防止Alt+Shift默认操作或检测多种操作系统语言的Javascript
- CKeditor:更改对话框中的默认选择选项
- 在不阻止默认行为的情况下检测IE10中的缩放
- 如何从外部页面激活非默认引导选项卡
- 防止默认锚点行为AngularJS
- 我的shareService在angular 2中发送值工作正常,但当我渲染我的另一个组件时,会获得默认值
- 在我的情况下,如何进行http请求
- 如何在 javascript 函数(如 node 或表达式 HTTP 函数)中接收默认参数
- 在节点.js中设置 HTTP GET 中的 URL 参数的默认值
- $.ajax:如何覆盖默认的http标头
- 如何用“重定向”来重定向网页;http错误404”;自动切换到默认网页
- Angular:未处理http错误的默认处理程序
- 如何解析Express/ NodeJs中缺少内容类型的HTTP请求,通过假设一个默认的内容类型
- 默认情况下,大多数http请求是同步的吗?
- 如何在请求发送之前在$http中附加一些默认数据
- HTTP请求的默认超时是多少?
- 如何创建一个将默认参数编码为JSON而不是HTTP参数的存储