http 缓存

135 阅读2分钟

http 缓存

什么是缓存? 把从服务器获取到的资源(例如:js、css、img)存储到本地磁盘中,下一次直接从本地磁盘中获取,节省请求的时间

强制缓存

1、首次请求,服务器返回资源,并在响应头中设置 Cache-Control,本地将资源进行缓存

2、再次请求,直接从本地磁盘获取资源

Cache-Control 的取值:

  • max-age:缓存最大过期时间
  • no-cache:可以在客户端存储资源,但每次都必须去服务端做新鲜度校验,从而决定是从服务端获取新的资源(200)还是使用客户端缓存(304)
  • no-store:永远都不要在客户端存储资源,永远都去服务器获取资源

协商缓存

服务端收到请求后,判断客户端的资源是否和服务端资源一致,如果一致则返回 304,客户端就从本地缓存中获取资源,否则返回 200 和最新的资源。

1、首次请求,服务端返回资源,并在响应头中设置资源标识

2、再次请求,请求头带上资源标识,服务端根据标识判断返回 304 还是 200 和最新资源

响应头的资源标识属性有:

  • Last-Modified:资源的最后修改时间
  • Etag:资源的唯一标识(一个字符串,类似于人类的指纹)

请求头的资源标识属性有:

  • If-Modified-Since
  • If-None-Match

分别与 Last-Modified 和 Etag 对应。

优先使用 Etag,因为 Last-Modified 只能精确到秒级,如果资源被重复生成,而内容不变,则 Etag 更精确

三种刷新操作对 http 缓存的影响

操作触发方法强缓存协商缓存
正常操作地址栏输入 url,跳转链接,前进后退等
手动刷新F5,点击刷新按钮,右键菜单刷新×
强制刷新Ctrl + F5,Command + R××