HTTP缓存(🦒重要)

  • 获取过的资源没必要再去请求获取一次,就是缓存。
  • 为什么需要缓存?
    网络请求相比于CPU的加载和页面渲染(毫秒级),是很慢的。我们需要通过缓存把网络请求数量和体积减少,而且网络请求不稳定(信号不好情况下),加剧了页面加载的不稳定性。我们需要优化网络请求让页面加载更快。
  • 哪些资源可以被缓存?
    静态资源如JS、CSS、img(回顾一下webpack根据文件内容加contenthash哈希,变or不变)。 HTML资源不可以被缓存,HTML可能随时被开发人员更新。

1. 强制缓存
Cache-Control: 客户端初次请求,服务端认为该资源可以被缓存就在返回资源的时候加上这个头部。在Response Header中。

缓存过期了,请求会再次经过服务器。

- cache-control的值
max-age: 缓存最大过期时间。(秒级别)
no-cahce: 不用服务端本地缓存。正常向服务端请求。
no-store(不常见)不用本地缓存也不用服务端别的缓存方式。就是任性地啥也不要给我缓存!
private: 由最终用户缓存(电脑 手机)
public:中间路由或者代理作缓存。

- 关于Expires

2. 协商缓存(对比缓存)

  • 是服务端缓存策略(服务端来判断,不是缓存在服务端)
  • 服务端判断客户端资源是否和服务端资源一样
  • 一致就返回304,否则返回200以及最新的资源

    - 资源标识
  • Last-Modified
    资源最后修改时间。

    If-Modified-Since是个key,它的值就是最近一次服务端传过来的Last-Modified!
  • Etag
    根据内容判断。

    示例:


    两者共存,Etag的优先级更高

    总结:👇❗👌

3. 刷新操作对缓存的影响

  • 正常操作:地址栏输入url,跳转链接,前进后退等。
    强制缓存有效,协商缓存有效。
  • 手动刷新:F5,点击刷新按钮,右击菜单刷新。
    强制缓存失效,协商缓存有效。
  • 强制刷新:ctrl + F5
    强制缓存失效,协商缓存失效。
posted @ 2024-10-30 11:20  一个甜橙子  阅读(2)  评论(0编辑  收藏  举报