HTTP缓存机制

  我们经常说这个页面有缓存~!这个Css有缓存~!我们如果打开控制台,也经常看到有个叫做Cache-Control的字段,但是这个字段里有很多种类的值,有很多同学不明白这些值都是什么意思~

  这些值不但在实际中会经常用到,而且在面试中也会经常被提起,那么今天渡一教育就带大家一起看一下这些值的含义吧~

  其实cache-control里的字段分为两类,一类是RequestHeader中使用的,另一类是ResponseHeader中使用的,我们最常见的或者说和前端最相关的就是ResponseHeader中使用的cache-control。

  我们今天来用邓哥吃药的例子,来为大家解释ResponseHeader中的Cache-Control的各种值~

  邓哥的近况可以用一句话来形容,那就是“浪多人变傻”。有一天邓哥忽然发现自己的脑子不够用了。于是决定买点药,不能让这种情况进一步恶化下去~

  于是邓哥去了药店,药店的医生见了邓哥,顿时大喜道:“呀~!邓哥来啦~!今天想吃点啥?”邓哥向药店医生描述了自己的情况之后,药店的医生推荐给邓哥本店的招牌【脑残片】。我们的故事就是从这开始的~

  这时我们可以把邓哥比作浏览器,药店比作服务器,药店医生比作服务器的代理,脑残片就是要请求的资源,比如一个图片之类的~

1.max-age:

  邓哥有个怪癖,买回来超过七天就不吃了,就得买新的。(就算没过期也不吃了~如果过期那更不吃了~)

  这就是max-age的作用,缓存的资源,超过一定时间就不要了,就要重新请求。如果买回来的时间是1号,脑残片的过期时间是5号,虽然邓哥能接受药在自己家放7天,但是因为5号就过期了,所以邓哥5号之后还是要重新去买的。max-age后面通常跟着一串数字,表示缓存的秒数。

2.max-stale:

  有时邓哥也是很节俭的,有的东西过期几天也是会吃的。

  这就是max-stale的作用,过期一点时间无所谓,也能用。max-stale后面也跟着秒数,表示过期多长时间的东西也可以继续使用。

  max-stale多数的时候会跟着max-age一起使用。如果脑残片是1号买的,邓哥最多保留7天(到7号),但是脑残片5号过期,如果max-stale=4的话,就意味着邓哥可以接受过期4天之内的脑残片。

  也就是相当于邓哥认为脑残片9号之后才不能吃。但是邓哥最多只能容忍药放在家里7天,所以8号的时候邓哥会去重新买药(重新请求资源)。

3.no-cache

  邓哥有时候谨慎起来也是很抽风的,每次吃药之前都要先去药店,让医生看一下药还能不能吃。万一哪批药有问题被召回了呢~(Ps:你懂的)

  这就是no-cache的作用,no-cache不会直接使用缓存,而是每次使用资源之前,都要先向服务器询问一下这个资源还能不能用,如果能用就继续用,如果不能用就重新请求。

4.no-store

  有时候邓哥也是很土豪的,每次吃药都要新买一瓶。每次都吃新的。(最早的时候,邓哥的手机也是,每次没电都买个新的,后来才知道手机居然可以充电。。。)

  这就是很no-store,很土豪的做法,每次都要向服务器请求资源。如果所有的资源都这样会对服务器造成很大的压力,所以我们对于那种对数据时效很敏感的数据,才会做这样的操作。

5.public

  邓哥家里有好多脑残片,由于邓哥经常去买脑残片,所以一进药店医生就会开玩笑道:“又来买脑残片啦?”

  public表示缓存可以被任何地方缓存,药店是服务器,医生相当于是代理服务器,药店的医生都能知道邓哥要买脑残片,证明代理服务器已经缓存了邓哥要买的东西。所以public表示任何地方都可以缓存资源。

6.private

  有的医生也是很严肃的,不会每次都和邓哥开玩笑。所以有的时候邓哥去药店,医生会很有礼貌并面带微笑的问邓哥:“今天想买什么~?”

  private的意思就是只指允许客户端进行缓存,代理服务器不能缓存这个资源。

7.must-revalidation

  有的时候,邓哥比较忙,邓嫂也会给邓哥备着点药。当邓嫂手里的药过期的时候,邓嫂也会去药店买药。

  邓哥和邓嫂相当于同一个浏览器中的两个窗口。max-age和must-revalidation都是本地过期之后去服务器端重新请求资源。但是区别在于,如果用max-age,那么如果资源没过期,新开的窗口也会使用这个资源。如果是must-revalidation,每次新打开窗口,都会向服务器去请求资源。

8.no-transform

  邓哥的脑残片是进口的,标签上都是英文,有时药店医生担心病人不认识药瓶上的字,会把字翻译过来写在标签上,然后贴上去。但是如果生产厂家要求,不能在中途对资源做任何修改操作,药店医生就不会给药瓶贴标签了~。

  通常当传输图片或者资源时,有时代理服务器为了有更好的性能,会对图片或者资源进行压缩,或者格式的转换。但是如果在响应头中带有这个字段,就表示这不允许在传输的中途对资源做任何修改。

  除了以上这些参数的作用会被经常问到之外,还会经常问到浏览器对于这些参数的相关响应,不同的参数加上不同的操作会产生不同的动作。我们可以通过下面的表格看到具体会发生什么动作。

以上故事内容纯属虚构,感谢邓哥对《邓哥奇遇记》系列的大力支持。最后对邓哥补充一句:“药不能停~!”

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

推荐阅读更多精彩内容