浅析浏览器缓存

通过最近一段时间的pc开发, 总结一下自己对浏览器缓存的认知, 熟练的掌握浏览器缓存, 可以加快页面加载速度, 提升用户体验.在开始前, 大家需要对以下知识点了解:

http status:200,200(from disk/memory cache),304,404等
强缓存(Pragma、Expires,cache-control)
对比缓存(If-None-Match/Etag ,If-Modified-Since/Last-Modified)

Pragma与Expires是http1.0时,用来控制强缓存:
Pragma:no-cache,代表此资源不会被浏览器从缓存中取,每次从服务器获取,返回状态码为 200;(现在浏览器基本上全在用http1.1,所以此属性基本上不再用)
Expires: Wed, 12 Jul 2017 06:23:33 GMT,值为一个格林时间,代表着此资源过期时间,浏览器会比较当前时间与此时间(此时间是相对服务器时间,如果修改了客户端时间,则这个比较就不准确),如果没有超过,则使用缓存,返回200(from cache)
cache-control是http1.1时,用来控制强缓存,更好的解决Expires不严谨的问题。
cache-control:public,代表此资源可以缓存在代理服务器上,供多个客户端共享
cache-control:private,代表此资源只能供客户端缓存
cache-control:max-age=3600,代表3600秒后再次请求此资源,此资源缓存失效
cache-control:no-cache,强缓存失效,需要去判断对比缓存
cache-control:no-store,强缓存与对比缓存均失效,需要请求服务器资源
以上3个字段优先级:Pragma>cache-control>Expires

If-None-Match/Etag ,If-Modified-Since/Last-Modified,是用来控制对比缓存的,
其中:
If-Modified-Since/Last-Modified值为一个格林时间,Last-Modified代表此资源在服务器上最后一次修改时间,If-Modified-Since存着上一次请求服务器获取该资源,该资源的最后一次修改时间,当我们进行对比缓存的时候,就会比较If-Modified-Since/Last-Modified这2个时间,如果Last-Modified大于If-Modified-Since,说明资源又发生了新的改变,此时获取最新资源,并返回200,反之代表资源未发生改变返回304,继续使用缓存的资源。(需要注意可能资源在1秒内发生了多次改变,那么就会出现服务器认为资源未发生改变继续返回304,或者资源定期生成,但内容未发生改变,这个时候服务器就会认为发生改变,重新请求)。
If-None-Match/Etag值是基于对应资源生成的唯一标识符,更好的解决If-Modified-Since/Last-Modified不严谨的问题。If-None-Match存着上一次请求服务器获取该资源,该资源对应的Etag值,当我们进行对比缓存的时候,就会比较If-None-Match与Etag值是否相等,相等代表此资源未发生改变,返回304,反之重新请求此资源返回200。(但是需要注意如果服务器采用分布式负载均衡时,每台服务器对同一个资源生成的Etag值可能会不相同,导致比较Etag与If-None-Match不相同,重新请求资源)。
以上2组优先级:If-None-Match/Etag >If-Modified-Since/Last-Modified
结合着以上内容我们可以得到如下结论:

一. 当浏览器第一次请求资源的时候,因为无缓存,所以服务器成功返回此资源,状态码为200,并且此时返回Expires ,cache-control,Etag, Last-Modified

image.png
image.png

二. 当浏览器第二次请求该资源时,因为有缓存,浏览器首先会判断强缓存是否有效,判断规则如上所述,如果强缓存有效,返回200(from cache),如果此时强缓存失效,就会进行对比缓存,判断对比缓存是否失效,判断规则如上所述,如果对比缓存有效,返回304(not modified),如果失效,就会请求服务器获取最新资源,此时状态码为200,同时返回新的Expires ,cache-control,Etag, Last-Modified


image.png

image.png

image.png

image.png

PS:200from cache可以分为2种,(from disk/memory cache),顾名思义我们可以得出,前者是从磁盘中获取缓存,后者是从内存中获取缓存,一般来说,html/js/css这类资源当属于200from disk cache,而像比如html中所用的图片和字体引用资源来自于memory cache,磁盘缓存当进程关闭,仍会存在,而内存缓存会在进程关闭后清空。
如下:
Js/html/css


image.png

image.png

Img/font


image.png

image.png

最后结合我们经常对浏览器页面操作,来看缓存:
当我们第一次请求页面后,在地址栏后按Enter键的时候,不会影响Expirse和cache-control,If-None-Match/Etag >If-Modified-Since/Last-Modified
image.png

image.png

当我们第一次请求页面后,按F5刷新,Expirse和cache-control失效,不会影响If-None-Match/Etag >If-Modified-Since/Last-Modified


image.png

image.png

当我们第一次请求页面后,按Ctrl+F5刷新, Expirse和cache-control,If-None-Match/Etag >If-Modified-Since/Last-Modified均会失效
image.png

image.png

最后我们可以在html的meta标签内禁用所有缓存, 可是如果加了这个标签,那么代表着此html本身就不允许缓存, 那么我们再谈浏览器缓存就没有意义了, 如图:
image.png

以上就是本人对于浏览器缓存的理解, 欢迎一起讨论交流.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,492评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,048评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,927评论 0 358
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,293评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,309评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,024评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,638评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,546评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,073评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,188评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,321评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,998评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,678评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,186评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,303评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,663评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,330评论 2 358

推荐阅读更多精彩内容

  • 浏览器对于请求资源, 流程如图所示: 可以看到浏览器的缓存机制分为两个部分: 1、当前缓存是否过期? 2、服务器中...
    zhoulujun阅读 1,206评论 0 3
  • 今天看奇舞团推了篇文章讲缓存策略的,讲的挺不错,记录一下。 原文地址就在下面。 总结: 缓存分为强缓存和协商缓存...
    NowhereToRun阅读 4,835评论 1 7
  • 转载:浏览器缓存知识小结及应用 阅读目录 1. 浏览器缓存基本认识 2. 强缓存的原理 3. 强缓存的管理 4. ...
    meng_philip123阅读 1,091评论 4 18
  • 0 前言 在前端开发中,性能一直都是被大家所重视的一点,然而判断一个网站的性能最直观的就是看网页打开的速度。其中提...
    七寸知架构阅读 8,966评论 7 58
  • `` 字符串模板 ${变量名称}代替字符串拼接字符串查找str.indexOf(str) 返回索引,没找到返回值 ...
    _海角_阅读 395评论 0 0