ie如何清除浏览器缓存 ie清除浏览器缓存( 二 )

ie如何清除浏览器缓存 ie清除浏览器缓存

上图中只是常用的消息报头 , 下面来看下不同字段之间的关系和区别:

  1. Cache-Control 与 Expires
  2. Cache-Control:HTTP1.1 提出的特性,为了弥补 Expires 缺陷加入的,提供了更精确细致的缓存功能 。详细了解详细看几个常见的指令:_ max-age:功能和 Expires 类似,但是后面跟一个以“秒”为单位的相对时间,来供浏览器计算过期时间 。_ no-cache:提供了过期验证机制 。(在 Chrome 的 devtools 中勾选 Disable cache 选项,发送的请求会去掉 If-Modified-Since 这个 Header 。同时设置 Cache-Control:no-cache Pragma:no-cache,每次请求均为 200)
    • no-store:表示当前请求资源禁用缓存;
    • public:表示缓存的版本可以被代理服务器或者其他中间服务器识别;
    • private:表示只有用户自己的浏览器能够进行缓存,公共的代理服务器不允许缓存 。
  • Expires:HTTP1.0 的特性,标识该资源过期的时间点,它是一个绝对值 , 格林威治时间(Greenwich Mean Time, GMT),即在这个时间点之后,缓存的资源过期;优先级:Cache-Control 优先级高于 Expires , 为了兼容,通常两个头部同时设置;浏览器默认行为:其实就算 Response Header 中沒有设置 Cache-Control 和 Expires,浏览器仍然会缓存某些资源,这是浏览器的默认行为,是为了提升性能进行的优化 , 每个浏览器的行为可能不一致,有些浏览器甚至没有这样的优化 。
  1. Last-Modified 与 ETag
  2. Last-Modified(Response Header)与 If-Modified-Since(Request Header)是一对报文头,属于 http 1.0 。If-Modified-Since 是一个请求首部字段,并且只能用在 GET 或者 HEAD 请求中 。Last-Modified 是一个响应首部字段,包含服务器认定的资源作出修改的日期及时间 。当带着 If-Modified-Since 头访问服务器请求资源时 , 服务器会检查 Last-Modified,如果 Last-Modified 的时间早于或等于 If-Modified-Since 则会返回一个不带主体的 304 响应,否则将重新返回资源 。(注意:在 Chrome 的 devtools 中勾选 Disable cache 选项后,发送的请求会去掉 If-Modified-Since 这个 Header 。)
  • ETag 与 If-None-Match 是一对报文头,属于 http 1.1 。ETag 是一个响应首部字段,它是根据实体内容生成的一段 hash 字符串,标识资源的状态 , 由服务端产生 。If-None-Match 是一个条件式的请求首部 。如果请求资源时在请求首部加上这个字段,值为之前服务器端返回的资源上的 ETag,则当且仅当服务器上没有任何资源的 ETag 属性值与这个首部中列出的时候,服务器才会返回带有所请求资源实体的 200 响应,否则服务器会返回不带实体的 304 响应 。
  • ETag 能解决什么问题?
a. Last-Modified 标注的最后修改只能精确到秒级,如果某些文件在 1 秒钟以内,被修改多次的话,它将不能准确标注文件的新鲜度;
b. 某些文件也许会周期性的更改,但是它的内容并不改变(仅仅改变的修改时间),但 Last-Modified 却改变了,导致文件没法使用缓存;
c. 有可能存在服务器没有准确获取文件修改时间,或者与代理服务器时间不一致等情形 。
  • 优先级:ETag 优先级比 Last-Modified 高 , 同时存在时会以 ETag 为准 。
缓存位置浏览器可以在内存、硬盘中开辟一个空间用于保存请求资源副本 。我们经常调试时在 DevTools Network 里看到 Memory Cache(內存缓存)和 Disk Cache(硬盘缓存),指的就是缓存所在的位置 。请求一个资源时,会按照优先级(Service Worker -> Memory Cache -> Disk Cache -> Push Cache)依次查找缓存,如果命中则使用缓存,否则发起请求 。这里先介绍 Memory Cache 和 Disk Cache 。

推荐阅读