LMLPHP后院

HTTP协议代理相关头Vary等的含义技术

maybe yes 发表于 2016-11-28 22:36

HTTP 协议头有很多字段,一般人不太可能把所有的字段的含义都弄清楚,并且 HTTP 协议本身也允许用户自定义协议头,所以一些不常用的协议头的含义就不是很重要了。本文主要讲解 HTTP 代理相关的协议头 Vary,Via,Proxy-Connection 等的含义。

喜欢长篇大论,看网上的一些文章动不动就页面拉不到底,真的很怀疑作者真的认真看过自己写的每一个字吗?

Vary 的英文含义是 “改变,变化,使多样化”。Vary 属于 HTTP 协议的内容协商机制的一种实现,个人认为其主要是为反向代理服务器(缓存服务器)服务的,其值一般情况下是“Accept-Encoding”。HTTP 的内容协商机制除了 Vary 外,还可以通过 300 Multiple Choices 响应头来实现,不过这样就比较麻烦,需要一次往返网络请求,很费时。

Vary 字段在一般情况下,特别开发人员很少见到,也很少使用。如前面所说,大多数用在反向代理缓存服务器上,比如淘宝网访问量比较大,这样就会设置多个反向代理服务器,代理服务器才是真正的面向用户服务的机器。而目前浏览器的种类特别多,并且支持的压缩格式也不一样,缓存服务器就会将不同种类的压缩格式各缓存一份,通过客户端的 Accept-Encoding 字段选择一个合适的版本返回。

如上面所描述,在缓存服务器和真实服务器之间需要使用 Vary 字段来进行内容协商,缓存服务器根据真实服务器的 Vary 中指定的字段进行缓存,Vary 可能的值有 Accept,Accept-Language, Accept-Charset,Accept-Encoding 等。看淘宝的服务器响应头里面还有一个字段 Via,Via 是什么东西,是不是正式的符合规范的 HTTP 协议头就不得而知了,Via 里面记录了本次请求经过了哪些服务器。

HTTP 协议本身就是非常灵活和开放的,所以一个字段用的人多了也就成了规范,而一个人只要真的理解了 HTTP 协议本身,要怎么玩就怎么玩,完全可以按照自己的习惯自定义规则。

另外,如果客户端请求服务器中间经过代理,Connection 字段会被改为 Proxy-Connection,这个是客户端代理的标识。而如果一个请求,服务器主动关闭了,比如响应 Proxy-Connection: Close,是无需返回 Content-Length 字段的。

相关文章
2021-08-04 18:08:50 1628071730 0.019202