Http缓存

Http缓存和常规意义上的缓存一致,当有可用的合法缓存时,就可以直接从本地存储设备而不是原始服务器提取.使用缓存有以下优点:

  • 减少冗余的数据传送
  • 缓解网络瓶颈的问题,更快的加载数据
  • 降低原始服务器的要求,更快地响应,避免过载的出现
  • 降低距离时延

任何事物都是在变化之中,缓存也一样,对于缓存有两点比较关键

  • 缓存的过期时间判断 --- Cache-Control首部和Expires首部
  • 缓存的再验证(缓存过期之后的验证) --- 条件方法进行再验证, If-Modified-Since和If-None-Match

一,缓存过期控制

1,Cache-Control和Expires

通过特殊的Httpp Cache-Control首部和Expires首部,Http让原始服务器向每个缓存文件中添加一个"过期时间",在这个缓存文件过期之前,缓存可以任意的使用这个文件.
一旦已缓存文件过期,缓存就必须与服务器进行核对,询问文件是否被修改过,如果被修改过,则需要获取一份新鲜(带有新的过期日期)的副本

屏幕快照 2017-02-28 16.57.04.png
2,Cache-Control和Expires的区别

由上图可知,二者的格式是

Expires:Thu, 30 Mar 2017 08:48:17 GMT
Cache-Control:max-age=2592000
这个max-age首部表示的是从服务器将文件传来之时起,可以认为此文件处于新鲜状态的秒数
而这个传来的时间就是Date字段

Date:Tue, 28 Feb 2017 09:09:01 GMT

Expires首部和Cache-Control:max-age首部所做的事情本质上是一样,但是Cache-Control首部使用的是相对时间而不是绝对时间,所以我们更倾向于使用比较新的Cache-Control首部,因为绝对日期依赖于计算机时钟的正确设置.

二,服务器再验证

<一>服务器再验证

已过期的文件并不意味着它和原始服务器上目前处于活跃状态的文件有区别,只是意味着到了要核对的时间了. 服务器再验证,说明缓存需要询问原始服务器文档是否发生了变化

  • 如果再验证显示内容发生变化,缓存会获取一份新的文件副本,并将其存储在旧文件的位置上,然后将文件发送给客户端

  • 如果再验证显示内容没有变化,缓存只需要获取新的首部,包括一个新的过期时间,并对缓存中的首部进行更新就行了

<二>使用条件方法再验证
1,If-Modify-Since 再验证
If-Modified-Since:Tue, 28 Feb 2017 05:28:08 GMT

If-Modify-Since(IMS)主要是和Last-Modified服务器响应首部结合使用.

  • 如果服务端文件未被修改,服务器会向客户端发送一个小的Http 304 Not Modified响应

  • 如果服务端文件已被修改,服务器向客户端发送一条普通的,带有完整内容的Http 200 OK响应

  • 如果服务端文件已经被删除了,服务器就回送一个404 Not Found响应,缓存也会将其副本删除

2, If-None-Match 实体标签再验证

有些文件可能会周期性地重写,但是包含的数据常常是一样的,尽管内容没有任何变化,但是修改日期会发生变化等等.
为了解决这些问题,HTTP允许用户对被称为实体标签(ETag)的"版本标识符"进行比较.

If-None-Match和ETag配合一起使用

  • 如果服务端文件未被修改,服务器会向客户端发送一个小的Http 304 Not Modified响应

  • 如果服务端文件已被修改,服务器向客户端发送一条普通的,带有完整内容以及新的ETag的Http 200 OK响应

  • 如果服务端文件已经被删除了,服务器就回送一个404 Not Found响应,缓存也会将其副本删除

1323108A-B528-4CD6-8B6D-49117EDB2276.png
DBA58716-E22D-4555-9B9D-8414EA8F3406.png

三,客户端新鲜度验证

1,no-store

Cache-Control:no-store

在请求头中,意味着不使用缓存
在响应头中,意味着不缓存响应
总之,一句话,不使用缓存

2,no-cache与Pragma:no-cache

 Cache-Control:no-store
 Pragma: no-cache

看这个no-cache理解这个字段会有歧义,字面意思是不使用缓存,这是错误的. 正确的姿势是这样子滴

Cache-Control:no-store的响应可以存储在本地缓存中的.
另外,在与原始服务器进行新鲜度再验证之前,这个缓存是不能提供给客户端使用.
Don't serve from cache without revalidation,这句话就是最好的解释

3, must-revalidate

Control-Cache:must-revalidate

意思是在实现没有跟原始服务器进行再验证的情况下,不能提供和这个对象的副本

4, only-if-cached

Control-Cache:only-if-cached

意味着只能使用本地缓存.

5, max-stale

1)Control-Cache:max-stale
2)Control-Cache:max-stale = <s>

1)缓存可以随意提供过期的文件.
2)如果指定了参数<s>,在这段时间内,文档就不能过期.这条指令范松了缓存的规则

6,min-fresh=<s>

Control-Cache:min-fresh=<s>

至少在未来<s>秒内保持新鲜

7,max-age=<s>

Control-Cache:max-age=<s>

缓存无法返回缓存时间长于<s>秒的文档.

最后附上一个Http缓存使用流程图

Http缓存.png

参考
1,RFC2616
2,<<Http权威指南>>

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

推荐阅读更多精彩内容

  • 本文内容大多参考《图解HTTP》一书 一. 认识代理服务器 所以讲缓存为什么要先扯代理服务器?别急,让我们看一下一...
    流光号船长阅读 1,916评论 0 10
  • 每个浏览器都自带了 HTTP 缓存实现功能。您只需要确保每个服务器响应都提供正确的 HTTP 标头指令,以指示浏览...
    _july77阅读 285评论 0 0
  • 网络特有的延迟以及数据传输的成本,制约互联网快速获取Web资源。为此,HTTP协议引入缓存以空间换时间,使浏览器缓...
    大头8086阅读 3,062评论 2 12
  • 本篇文章篇幅比较长,先来个思维导图预览一下。 一、概述 1.计算机网络体系结构分层 2.TCP/IP 通信传输流 ...
    涤生_Woo阅读 54,987评论 24 557
  • 来吧,暖云碎织的天空里轻剪的纸鸢沐浴着曛醉的暖阳田栊上,小星星眨巴着惺忪的睡眼山谷中,紫鸢尾荼蘼了整条流...
    寒山芥子阅读 295评论 3 4