美文网首页
浏览器缓存问题

浏览器缓存问题

作者: Beppo | 来源:发表于2020-04-15 11:02 被阅读0次
图片来源网络,侵权联系删除
1. 浏览器缓存基本类型
  • 强缓存

    浏览器加载资源时,会先根据本地缓存资源的 header 中的 ExpireCache-control 信息判断是
    否命中强缓存,如果命中则,直接使用缓存中的资源,不再请求服务器

  • 协商缓存

    当强缓存没有命中的时候,浏览器会发送一个请求到服务器,服务器根据请求头中的部分信息 If-Modify-SinceEtag 来判断是否命中缓存。如果命中,则返回 304 ,告诉浏览器资源未更新,可使用本地的缓存。

2. 浏览器缓存请求头相关的设置
  • Expire
    表示缓存到期时间,这个是个绝对时间,如果我修改了客户端的本地时间,是不是就会导致判断缓存失效了呢。
  • Cache-Control
    在 HTTP/1.1 中,增加了一个字段 Cache-Control ,它包含一个 max-age 属性,该字段表示资源缓存的最
    大有效时间,这就是一个相对时间。主要取值
    • public:所有内容都将被缓存(客户端和代理服务器都可缓存)
    • private:所有内容只有客户端可以缓存,Cache-Control的默认取值
    • no-cache:客户端缓存内容,但是是否使用缓存则需要经过协商缓存来验证决定
    • no-store:所有内容都不会被缓存,即不使用强制缓存,也不使用协商缓存
    • max-age=xxx (xxx is numeric):缓存内容将在xxx秒后失效
  • Last-Modified,If-Modified-Since
    浏览器第一次请求资源的时候,服务器返回的 header 上会带有一个 Last-Modified 字段,表示资源最后修改的时间。当浏览器再次请求该资源时,请求头中会带有一个 If-Modified-Since 字段,这个值是第一次请求返回的 Last-Modified 的值。服务器收到这个请求后,将 If-Modified-Since 和当前的 Last-Modified 进行对比。如果相等,则说明资源未修改,返回 304,浏览器使用本地缓存。
  • Etag,If-None-Match
    是http协议提供的若干机制中的一种Web缓存验证机制,并且允许客户端进行缓存协商。生成etag常用的方法包括对资源内容使用抗碰撞散列函数,使用最近修改的时间戳的哈希值,甚至只是一个版本号。 和last-modified一样.
    • 浏览器会先发送一个请求得到etag的值,然后再下一次请求在request header中带上if-none-match:[保存的etag的值]。
    • 通过发送的etag的值和服务端重新生成的etag的值进行比对,如果一致代表资源没有改变,服务端返回正文为空的响应,告诉浏览器从缓存中读取资源。
    • 二者对比
      精确度上:Etag要优于Last-Modified。
      优先级上:服务器校验优先考虑Etag。
      性能上:Etag要逊于Last-Modified
3. 浏览器缓存机制
  1. 浏览器发送请求前,根据请求头的expires和cache-control判断是否命中(包括是否过期)强缓存策略,如果命中,直接从缓存获取资源,并不会发送请求。如果没有命中,则进入下一步。
  2. 没有命中强缓存规则,浏览器会发送请求,根据请求头的last-modified和etag判断是否命中协商缓存,如果命中,直接从缓存获取资源。如果没有命中,则进入下一步。
  3. 如果前两步都没有命中,则直接从服务端获取资源。


    浏览器缓存机制
参考文档

相关文章

  • 浏览器缓存?优点?清除方法?

    ☆前端优化:浏览器缓存技术介绍 - 简书 浏览器缓存(适用于前端解决缓存问题) - 简书 js清除浏览器缓存问题的...

  • 静态文件缓存问题

    问题描述 在日常的项目中,在浏览器加载静态文件,会遇到浏览器缓存的问题。 浏览器会默认使用缓存,当我们修改了静态文...

  • display:none无效问题问题

    如果display:none是通过 引入,则可能是浏览器缓存问题,浏览器对以前版本的缓存解决: 方法一、清楚浏览器...

  • 浏览器缓存(http缓存)

    浏览器缓存有两种:强制缓存和协商缓存 浏览器缓存机制 浏览器发送请求,会先从浏览器缓存中查找【请求结果】和【缓存标...

  • 缓存、cookie、token、session、localSto

    一、缓存分类 服务器端缓存(CDN缓存) 客户端缓存(浏览器缓存); 二、浏览器缓存 强缓存:浏览器在加载资源时,...

  • 协商缓存和强缓存

    浏览器缓存主要有两类:缓存协商和彻底缓存,也有称之为协商缓存和强缓存 浏览器缓存机制浏览器缓存(Brower Ca...

  • JS获取服务器时间——IE浏览器时间出现1970问题

    归根结底是IE浏览器的缓存机制问题 解决方法: cache:false关闭浏览器的缓存,而加入type:"HEAD...

  • 浏览器缓存策略

    最近在对项目做 IE 11 兼容,由 IE 的缓存问题,引发我对于浏览器缓存策略的思考。 缓存类型 web缓存主要...

  • DSBD

    1.浏览器缓存 浏览器每次发起请求,都会先在浏览器缓存中查找该请求的结果以及缓存标识 强制缓存优先于协商缓存进...

  • 浏览器缓存问题

    最近上线发现,新上线的内容要强刷下浏览器,页面才会是新内容 Last-Modified 是什么 Last-Modi...

网友评论

      本文标题:浏览器缓存问题

      本文链接:https://www.haomeiwen.com/subject/bxeqvhtx.html