我在Google Chrome版本55.0.2883.95(64位)和版本Mozilla 50.1.0上访问了相同的网址(由于客户机密而无法透露网址),但Google Chrome和Mozilla浏览器上的响应标头字段不同 .
Google Chrome上的回复是: -
HTTP/2 200 access-control-allow-origin: * content-encoding: gzip content-type: application/json;charset=UTF-8
Headers 字段不在Pascal Case中,但对Mozilla的响应是: -
HTTP/2 200 Access-Control-Allow-Origin: * Content-Encoding: gzip Content-Type: application/json;charset=UTF-8
Headers 字段是Pascal大小写 .
现在我知道这是根据文章RFC2616第4.2节(https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html - sec4.2),它说
“每个 Headers 字段由名称后跟冒号(":")和字段值组成 . Field names are case-insensitive. “
但我的客户在他的应用程序上运行了一些自定义缓存库,如果Content-Encoding标头不在Pascal情况下,它会开始抱怨 .
什么可能是一个可能的解决方案?提前致谢 :)
1 回答
HTTP/2 specification清楚地表明必须将标头转换为小写的先前编码 .
在线路上,两个浏览器都按照HTTP / 2规范接收小写的响应头 .
看起来Chrome将 Headers 名称按原样传递给应用程序层,而Firefox尝试恢复Pascal案例,至少对于已知的 Headers 名称 .
您可以向任一浏览器提交问题,但我怀疑它是否会被解决 .
真正的问题是客户的缓存库已损坏,应该考虑到HTTP头名称从一开始就不区分大小写这一事实 .
根据您使用的技术,您可以做的是编写一个适配器层,在访问损坏的缓存库之前执行标头名称的Pascal大小写转换 .