HTTP缓存控制头部

合理、充分利用缓存是提高应用程序整体性能的重要手段,这个结论同样适用于web应用程序。web应用的缓存可以分为服务端缓存、客户端/前端缓存,本文简要介绍前端缓存中常见的HTTP缓存控制头部,以及用户行为对缓存的影响。

常见缓存头部

浏览器第一次向web服务器发起http请求后,服务器会返回请求的资源,并且响应头中添加一些有关缓存的字段,如:Cache-ControlExpiresLast-ModifiedETagDate。之后浏览器再向该服务器请求该资源就可以视情况使用缓存

http缓存处理

http缓存处理

常见HTTP缓存头部有:

Pragma

HTTP1.0时代的遗留物,当该字段值为no-cache的时候(事实上现在RFC中也仅标明该可选值),会知会客户端不要对该资源读缓存,即每次都得向服务器发一次请求。

Expires

  • 一般使用Cache-Control和Expires共存,主要是为了兼容http1.0
  • Expires返回的是服务器时间,需要考虑服务器与客户端的时间同步(时区等)
  • 过期之后重新返回的响应中要加入新的Expires

Cache-Control

  • max-age 过期时间是一个时间段,从接受到这个响应之后开始生效,过期之后仍然可以使用这个时间段
  • max-age 和 Expires 共存的时候使用max-age
  • no-cache 表示可以缓存,但是在使用缓存之前需要向服务器验证
  • no-store 不缓存

Last-Modified

  • 用来标识服务端最后一次修改资源的时间
  • 配合If-Modified-Since使用,检查缓存与服务端是否一致

Etag

  • 服务端资源的唯一标识,看作一种数字签名
  • 当资源没有发送变化的情况下,Etag计算值不发生变化
  • 当有多个服务端的情况下,需要保证不同服务器上的Etag计算方式一致
  • 需要额外的计算Etag的资源

用户行为

用户访问/刷新页面分成三类:

  • 在URI输入栏中输入然后回车/通过书签访问/链接跳转/前进、后退
  • F5/点击工具栏中的刷新按钮/右键菜单重新加载
  • Ctl+F5

三种行为对浏览器缓存的影响如图所示:

用户行为对缓存影响

用户行为对缓存影响

参考

  1. HTTP缓存控制小结
  2. [译] HTTP 缓存头部 – 完全指南
  3. HTTP与缓存相关的头部
  4. 一张图理解Http缓存

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Scroll Up