今天在处理 express 的 req.headers 时遇到坑,特地记录下来。在 req.query, req.cookies, req.headers 这三个对象,按理应该按照客户端传过来的数据进行处理,但是唯独 req.headers 是全小写的,无论你客户端传过来的是大写还是小写,这里接收到的都是小写。这是为什么呢?原来,这和 http 协议还有关系,http/1.0 时是大小写敏感的,也就是说 Token 和 token 是两个不同的 key,到了 http/1.1 大小写又不敏感了,这两个 key 是同一个 key,再到 http/2.0 协议要求 HEADER 的 key 必须全部小写,RFC7504,我也是醉了。因为 http/1.1 和 http/2.0 是当下最广泛的 http 协议,所以 express 索性全部用小写,以兼容后面的版本。
那么怎么解决这个问题呢?使用 req.get() 即可,req.get 是大小写不敏感,遵循 http/1.1 的规则,这样就可以避免大小写带来的问题。至于 cookies 等其他参数,则是大小写敏感的。