经过大量的搜索,调试,测试和无奈之后,我们终于发现Chrome 60中的标头字段名称转换为小写字母,与Chrome
59(在我同事的电脑上)保持不变,这是他们的名字。所以标题字段名称现在
x-access-token是
X-Access-Token
对于那些
XHR.getAllResponseHeaders()在某处的javascript中使用-
function且正在使用Chrome或其客户端的用户:准备好对您的javascript进行修补以保持其正常运行,因为 自Chrome
60起,XHR.getAllResponseHeaders()-函数现在仅输出小写的标头字段名称!
一些有相同问题的人:https :
//twitter.com/thegecko/status/890346862875742210
@thegecko:Argg!#Chrome 60强制XHR中的标头名称变为小写。getAllResponseHeaders()破坏了我!
另请参阅:https : //groups.google.com/a/chromium.org/forum/#!
topic /blink-
dev/_oxlCPNsrck ,https :
//github.com/whatwg/xhr/issues/146和更改日志位于https://chromium.googlesource.com/chromium/src/+/99c274ae8e7d366261dcfb89e0b98e733fb9d5f4
根据github和google组中的讨论,我们被警告说,执行区分大小写的字符串比较可能不是一件好事。在即将到来的HTTP /
2中,所有标头均为小写。因此,XHR规范在HTTP / 1.1中也更改为小写所有标头。Chrome(60)是第一个更改此设置的人,但是Gecko /
Firefox(https://bugzilla.mozilla.org/show_bug.cgi?id=1370485)和Webkit
/ Safari的补丁已可用。
我们使用一些简单的代码进行了测试,但是当
Foo: Bar从服务器发送标头时,
XHR.getAllResponseHeaders()-function
的输出(在Chrome 60中)将为`foo:Bar。
因此,为了使它在所有浏览器中都可以使用并适应未来发展:确保对响应中的标头字段名称执行不区分大小写的比较。可以通过
XHR.getAllResponseHeaders().toLowerCase()在处理标题之前使用或使用不区分大小写的正则表达式(例如
XHR.getAllResponseHeaders().match(/foo/i);查找它们)来轻松完成此操作。
编辑: 经过更多测试…我们发现使用
XHR.getResponseHeader()也是从请求的标头获取值的安全方法。根据上面的示例,在发送标头时
Foo:Bar,无论我们使用
XHR.getResponseHeader('Foo')还是XHR.getResponseHeader('foo')都无所谓,两者都将输出值“ Bar”。该MDN文档
XHR.getResponseHeader证实了这一点:
标题名称的搜索不区分大小写。



