理解浏览器的缓存

  1. 缓存是用来做什么的?
    从我们在浏览器输入地址再按下回车以后,浏览器会向服务器依次进行DNS查询、初始化链接、发送请求以及等待服务器响应,这些都会耗费一定的时间。这些过程结束之后,就会从服务器上下载相应的内容,这也会耗费一定的时间。但是,如果我这次要下载的内容和上一次一模一样的话,那就可以从缓存中获取这些内容,不必再从服务器上下载,进而节约内容的下载时间,这就是缓存的作用。

  2. 设置Cache-Control
    这是一种比较老的设置缓存的方法,在服务端对相应文件(比如:example.css)的响应头设置Cache-Control:public,max-age=3600,这样,以后在请求example.css时,就不会从服务器上下载文件而是从缓存里拿文件了。而缓存的时间就是上面设置的3600秒,在这3600秒之内浏览器都只从缓存里读取example.css,过了3600秒才会再次从服务器上读取文件。

  3. 问题:如果我的example.css在这3600秒之内发生变化了怎么办?如何让变化了的example.css被下载而不是从缓存当中读取旧的example.css呢?
    首先,默记以下真理:缓存都是依据url来实现的。相应的,只要把example.css改为example_1.css再重新设置下服务器路径,那么浏览器就会根据新的url来请求相应的文件,而不会再从缓存中拿了。当然,这是非常旧的方法,五年前的前端是这么干的。

  4. 至少有一个文件不应该被缓存
    如果html文件被缓存了,那么依托这个html文件的其它css和JS文件即便更改了路径也无法请求到了,这就要求这个html文件不应该被缓存。而浏览器对于用户发的第一个请求默认不缓存。这样的话,其它的文件有更改了才会有被从服务器读取的机会。

  5. Expires
    一般不和Cache-Control共用。不推荐使用expires。它同样是在响应头里添加一个Expires,它的值是一个格林梅治时间,在这个时间之前会一直缓存,这个时间之后会再次从服务器上下载相应的文件。

Expires的问题及与Cache-Control的区别:Expires设置的一个绝对时间,比如说设置的缓存过期时间为2018年1月1日,而它的对比时间是用户的本地时间。如果用户把自己电脑的时钟调快了一年的话,那这个缓存时间就无效了。相对的,Cache-Control设置的相对时间,即当内容下载之后的时间,不会受到用户本地时间的影响。

  1. Last-modified
    不推荐使用。它设置的是一个资源的最后修改时间,举个例子,一个资源的Last-modified时间为2016年8月1日,而今天的时间为2017年8月1日,当浏览器读取到这个资源的最后修改时间时,它就会认为,既然这个资源过去一年都没有修改过,那么将来可能也不会修改,于是就会给一个启发式的缓存时间,一般来说是Last-modified值距离现在时间的10%;

  2. ETag

想理解ETag就需要首先理解md5。md5是一种算法,它接受一个输入,是任意字符串,输出是一个32位的字符串。它的经常用来定两个不知道内容的东西是否是相等的。

当在响应头中使用了ETag时,资源会被哈希(可以是md5也可以是其它算法),这个哈希值是唯一的。它和内容一样会返回给浏览器,当浏览器下次再请求这个资源时,之前的哈希值会在请求头if-none-match一同发送给服务器,服务器会再计算一次这个资源的哈希值,并且把它和浏览器请求过来的if-none-match值进行比对,如果二者是一样的,这就表示这个资源没有更改过,那就从缓存中直接拿就行,如果值不一样的话,那就表示这个资源有更新,那就从服务器下载这个资源的更新版本。

因为所有文件都只有一个哈希值,一个文件在被修改前后,它的哈希值是不一样的。

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

推荐阅读更多精彩内容