阅读 222

HTTP协议中的Vary头,怎么用

一、Vary 解决什么问题?

浏览器 或 代理服务器 会根据 请求URL 生成 key 来建立与缓存文件的一一对应关系,这样后面相同的请求才能找到并使用缓存。

1、问题

为了应对不同设备请求(譬如电脑和手机),网站对于相同 URL 采用不同页面来响应,这会让创建缓存文件的工作陷入混乱,让手机来显示电脑版网页缓存,必然会出现错误。

2、解决方案

用 Vary 来区分,不同设备的相同URL请求,完美解决这个混乱。Vary 是在 HTTP 协议的 1.1 版本中新添加功能。详细说明,见下面  Vary: User-Agent


3、Vary 语法
Vary: *
Vary: <header-name>, <header-name>, ...复制代码
  • *  :表示不使用缓存,不推荐使用。用  Cache-Control: no-store  表示不使用缓存更合适,因为这样的代码阅读更清晰明了。

  • header-name  :表示 HTTP 头,可以有多个。


二、实际案例
1、Vary:Content-Encoding

问题说明:相同页面在 HTTP 传输过程中使用了不同压缩算法,如果不能正确区分,会造成页面打开错误。

解决方案:服务器返回  Vary:Content-Encoding  来建立跟压缩算法相关的缓存;客户端通过发送  Accept-Encoding:br  明确需要的算法类型,从而获得正确的缓存资源。

  • Client1 向代理服务器请求 /doc 页面,共享缓存Cache为空,向源服务器发请求,代理服务器收到页面数据并发送给Client1,同时缓存此次页面;

  • Client2 向代理服务器请求 /doc 页面,代理服务器查找无对应缓存,向源服务器发请求来响应Client2,代理服务器收到页面数据并发送给Client2,同时缓存此次页面;

  • Client3 向代理服务器请求 /doc 页面,代理服务器查找到缓存,直接把缓存发送给Client3.

HTTP-Vary


2、Vary: User-Agent
  • 问题说明:

    网站为了让 电脑 和 手机 都能访问,通常会有两个版本。手机先访问网站,产生了手机版缓存,之后电脑也访问了,获得了手机版缓存,这样显示页面必然会产生错误。

  • 解决方案:

    服务器返回  Vary: User-Agent  针对不同设备生成不同缓存。客户端请求时带上 User-Agent 头,明确设备类型。完美解决了,过程跟上图类似,只是创建和寻找缓存的依据,换成了 User-Agent。

 伪原创工具 SEO网站优化  https://www.237it.com/ 

作者:learn_anything_cn
链接:https://juejin.cn/post/7036214030163410975

文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐