HTTP/2约束Header大小写

栏目: 后端 · 前端 · 发布时间: 7年前

内容简介:晚上通过抓包发现几个疑点:先修复客户端 HTTP/1.1

起因

晚上 Android 客户端遇到奇怪的问题:在某台新配的服务器上,出现应用层获取 Header 自定义键 Authorization 时出现其值为空,但存在键 authorization

调查

通过抓包发现几个疑点:

  • 问题以前没有出现,业务也是正常的,唯独连接到这台服务器后出现异常

  • 同一套代码,仅对这台服务器发出的请求没HTTP版本号,如:HTTP/1.1;
  • 所有请求体、响应体的头字符全是小写;
  • HTTP/1.1头大小写不敏感,且另外几台服务器Header约定俗成使用大写开头;
  • iOS业务运行没有问题,但没有抓包查看;

先修复客户端 HTTP/1.1 大小写不敏感 实现为 大小写敏感 的严重问题。

调查的脚步不能就此终止,还要明确就为啥这台服务器如此突出。由于晚上问题发现时后端同事下班了,又一直按照HTTP/1.1的定义查找问题,丝毫没有进展。最后想到HTTP/2才如梦初醒,翻查RFC的官方文档。

RFC定义

文档 RFC7504 明确指出Header的定义:

8.1.2.  HTTP Header Fields

   HTTP header fields carry information as a series of key-value pairs.
   For a listing of registered HTTP headers, see the "Message Header
   Field" registry maintained at <https://www.iana.org/assignments/
   message-headers>.

   Just as in HTTP/1.x, header field names are strings of ASCII
   characters that are compared in a case-insensitive fashion.  However,
   header field names MUST be converted to lowercase prior to their
   encoding in HTTP/2.  A request or response containing uppercase
   header field names MUST be treated as malformed (Section 8.1.2.6).

从上文可知, HTTP/2HTTP/1.x 同样使用 ASCII 字符集,但 HTTP/2 的头必须使用小写,而不是 HTTP/1.x 大小写均可。也正是碰上终端业务代码实现不严谨,才引发问题。

最终确认这台服务端 Nginx 开启了 HTTP/2 ,且客户端问题已修复提交,调查结束。

总结

对于任意网络协议,因为客户端在上层跟踪数据包有一定难度,所以先用抓包 工具 辅助是一个很好的习惯。

尽管各种协议更新演进,如果前端(业务代码、依赖库版本)或后端任意一方出现协议不兼容或实现不严谨,排查问题难度较高,所以实现上应尽可能做到细致严谨。

对客户端来说,把所有HTTP的Header键字符串转换为小写,业务匹配时也用小写键名称(即equalsIgnoreCase)同时适配 HTTP/2HTTP/1.x 。注意,如果转小写后出现多个相同Header,必须要求服务端修正,同时前端调整代码。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

算法分析导论(第2版)(英文版)

算法分析导论(第2版)(英文版)

[美]Robert Sedgewick(罗伯特•塞奇威克)、[美]Philippe Flajolet(菲利普•弗拉若莱) / 电子工业出版社 / 2015-6 / 128.00元

《算法分析导论(第2版)(英文版)》全面介绍了算法的数学分析中所涉及的主要技术。涵盖的内容来自经典的数学课题(包括离散数学、初等实分析、组合数学),以及经典的计算机科学课题(包括算法和数据结构)。《算法分析导论(第2版)(英文版)》的重点是“平均情况”或“概率性”分析,书中也论述了“最差情况”或“复杂性”分析所需的基本数学工具。 《算法分析导论(第2版)(英文版)》第 1 版为行业内的经典著......一起来看看 《算法分析导论(第2版)(英文版)》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

MD5 加密
MD5 加密

MD5 加密工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具