作家
登录

浅谈浏览器缓存机制

作者: 来源: 2017-04-26 15:03:55 阅读 我要评论

Expires

  1. Expires:Wed, 05 Apr 2017 00:55:35 GMT 

即到期时光, 以办事器时光为参考系, 其优先级比 Cache-Control:max-age 低, 两者同时涌如今响应头时, Expires将被后者覆盖. 如不雅Expires, Cache-Control: max-age, 或 Cache-Control:s-maxage 都没有在响应头中出现, 并且也没有其它缓存的设置, 那么浏览器默认会采取一个启发式的算法, 平日会取响应头的Date_value - Last-Modified_value值的10%作为缓存时光.

如下资本便采取了启发式缓存算法.

协商缓存

其缓存时光为 (Date_value - Last-Modified_value) * 10%, 计算如下:

  1. const Date_value = new Date('Thu, 06 Apr 2017 01:30:56 GMT').getTime(); 
  2.  
  3. const LastModified_value = new Date('Thu, 01 Dec 2016 06:23:23 GMT').getTime(); 
  4.  
  5. const cacheTime = (Date_value - LastModified_value) / 10; 
  6.  
  7. const Expires_timestamp = Date_value + cacheTime; 
  8.  
  9. const Expires_value = new Date(Expires_timestamp); 
  10.  
  11. console.log('Expires:', Expires_value); // Expires: Tue Apr 18 2017 23:25:41 GMT+0800 (CST)  

可见该资本将于2017年4月18日23点25分41秒过时, 测验测验以下两步进行验证:

1) 试着把本地时光修改为2017年4月18日23点25分40秒, 敏捷刷新页面, 发明强缓存依然有效(依旧是200 OK (from disk cache)).

3) 将本地时光恢复正常(即 2017-04-06 09:54:19). 刷新页面, 发明Date依然是4月18日, 如下所示.

 

大年夜⚠ Provisional headers are shown 和Date字段可以看出来, 浏览器并未发出请求, 缓存依然有效, 只不过此时Status Code显示为200 OK. (甚至我还专门打开了charles, 也没有发明该资本的任何请求, 可见这个200 OK若干有些误导人的意味)

可见, 启发式缓存算法采取的缓存时光可长可短, 是以对于惯例资本, 建议明白设置缓存时光(如指定max-age 或 expires).

ETag

  1. ETag:"fcb82312d92970bdf0d18a4eca08ebc7efede4fe" 

实体标签, 办事器资本的独一标识符, 浏览器可以根据ETag值缓存数据, 节俭带宽. 如不雅资本已经改变, etag可以赞助防止同步更新资本的互相覆盖. ETag 优先级比 Last-Modified 高.

If-Match

语法: If-Match: ETag_value 或者 If-Match: ETag_value, ETag_value, …

缓存校验字段, 其值为前次收到的一个或多个etag 值. 常用于断定前提是否知足, 如下两种场景:

  • 对于 GET 或 HEAD 请求, 结合 Range 头字段, 它可以包管新范围的要乞降前一个来自雷同的源, 如不雅不匹配, 办事器将返回一个416(Range Not Satisfiable)状况码的响应.
  • 对于 PUT 或者其他不安然的请求, If-Match 可用于阻拦缺点的更新操作, 如不雅不匹配, 办事器将返回一个412(Precondition Failed)状况码的响应.

语法: If-None-Match: ETag_value 或者 If-None-Match: ETag_value, ETag_value, …

缓存校验字段, 结合ETag字段, 常用于断定缓存资本是否有效, 优先级比If-Modified-Since高.

  • 对于 GET 或 HEAD 请求, 如不雅其etags列表均不匹配, 办事器将返回200状况码的响应, 反之, 将返回304(Not Modified)状况码的响应. 无论是200照样304响应, 都至少返回 Cache-Control, Content-Location, Date, ETag, Expires, and Vary 中之一的字段.
  • 对于其他更新办事器资本的请求, 如不雅其etags列表匹配, 办事器将履行更新, 反之, 将返回412(Precondition Failed)状况码的响应.

Last-Modified

语法: Last-Modified: 礼拜,日期 月份 年份 时:分:秒 GMT

  1. Last

      推荐阅读

      大数据在美国 零售商如何使用人工智能进行预测分析?

    当我们为一个俄罗斯大年夜型零售连锁店开辟推荐体系时,我们采取协同过滤。 导语:在美国,人工智能中的猜测分析和推荐算法正在零售范畴发挥侧重要感化。本文是36大年夜数据记者张鲁翻译自>>>详细阅读


    本文标题:浅谈浏览器缓存机制

    地址:http://www.17bianji.com/lsqh/34978.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)