Traefik会修改头部以符合HTTP标准


Traefik Modify Header

使用Traefik代理的所有http请求,header的大小写会变化,这是因为Traefik用了Go的标准库,在这个库里所有的header都会遵循规范来。可以参考,https://github.com/golang/go/issues/5022

Http Canonical 规范

简单说,http 1.1对header是大小写敏感的,但http 2是header全小写。这样一来很多旧时的代码是无法兼容客户端变化的,例如:JWT需要使用header传递,你取key得时候就要根据http版本来取大小写的key。在大小写敏感前提下,authentication和Authentication代表着两个不同的key,但他们不应该同时存在!

结论:Traefik的做法是对的

我认为,服务端输出的header的代码应该是根据http版本输出大小写的,而客户端是知道自己的http版本而取对应的key。所以应该理解header大小写问题是一个抽象的概念,他只是抽象到头部中有一个key,我需要取得这个key,而在客户端中已经自动把对应版本的key进行了大小写转换。所以Traefik的做法是正确的,他把抽象的key根据协议转换了大小写。

还是需要关心的问题

大部分客户端和服务端并没有对http版本做对齐,所以你要关心你的开发环境如果不经过代理“标准化”头部是不是还正常,你的客户端能不能对齐服务端的变化!~


发表评论

您的电子邮箱地址不会被公开。