CDN 与 缓存

缓存

这篇文章好  http://www.cnblogs.com/futan/archive/2013/04/21/cachehuancun.html

我们通常意义上说的缓存主要包含两部分。第一个是用户浏览器端的缓存,第二个是服务器端为了提高访问速度而加的CDN。

1、(浏览器缓存)本地缓存

说到浏览器缓存就是指你打开一网页,浏览器会自动下载副本到你的电脑上,就相当于你另存为网页到某个地方而已,只不过这儿是自动而已。当然不会全部内容都会下载,而是有选择的。

插入第一次请求跟第二次有缓存的请求的流程图:


客户端缓存是否需要缓存是可以在服务器端代码上控制的,通过响应头来实现。不存储的情况有如下几点:

(1)如果响应头告诉浏览器不需要缓存,则缓存器就不会缓存相应内容。

(2)如果请求信息需要认证或者是安全加密的,相应的内容不会被缓存;

(3)通过校验响应头来决定是否需要缓存,具体的响应头在下面会讲;

(4)post提交的内容,返回的页面大部分不需要缓存,get返回的数据可以缓存下来;对于post请求在idempotent request请求 (可以理解为简单的查询操作)时,会被缓存。

http头中关于缓存的meta标签

其中 expire和cache-control 控制客服端是否向服务器端发送请求。而last-modified/if-modified-since 和etags/if-none-match  则都会向服务器端发送请求,只是在服务器端判断所请求的内容是否已经过期而已。

(1)如果从服务器端返回的响应中,如果不存在expires或者cache-control参数,则浏览器不会存储任何副本;

expires头部字段提供一个日期和时间,响应在该日期和时间之后,则认为失效,失效的副本是不会被存储的;

(2)cache-control 这个字段用于指定所有缓存机制在整个请求、响应中必须服从的命令,这些命令指定用于阻止缓存对请求或者响应造成不利于干扰的行为,这些指令通常覆盖默认缓存算法。cache-control 里面有一个max-age (比如60s),这个优先级最高。如果这个没过期,后面几个参数直接不用看。

缓存指令是单向的,cache-control 是服务器端对浏览器缓存行为的控制。

cache-control 是关于浏览器的最重要的设置,因为它覆盖其他设置,比如expires 和 last-modified。

(3)当一份从服务器返回数据中包含last-modified,则浏览器基于此信息,通过添加一个if-Modified-Since 请求参数,向server 查询,这个副本从上次查看后是否被修改了。

last-modified 和 if-modified-since 都是用于记录页面是否过期的http头信息,只是last-modified 是由服务器发送给客户端的,而if-modified-since 是从客户端发送给服务器端。

(4)Etag 服务器生成唯一标示符Etag,每次副本的标签都会变化,由于server 控制了Etag如何生成,缓存服务器可以通过if-None-Match 请求,如果返回没变,则当前副本与原副本完全一致。

etag的请求过程:

1)第一次客户端请求页面A

2)服务器将页面A以及etags一起发送给客户端;

3)客户端展现页面A并且将etags存储在缓存中;

4)客户端再次请求页面A,会将上次缓存中的etags一起发送给服务器;

5)服务器检查etags ,并判断当前页面自从上次请求之后是否已经改变过,如果没有,则直接返回一个304和一个空的响应体。

etag 主要解决了一些last-modified无法解决的问题:

1)一些文件可能周期性的改变,但是他的内容并没有改变(仅仅改变的时间),这个时候我们不需要客户端认为这个文件做了改变了;

2)某些文件更改比较频繁,比如一秒内改变了无数次,if-modified-since 能检测到的变化时以秒为单位,这种修改无法判断

3)某些服务器不能精确地得到文件的最后修改时间

如果etag跟if-modified-since一起使用,会先判断是否有etag,然后才判断if-modified-since。而last-modified 的优先级又高于expires.

2、cdn 缓存(服务器端缓存)

cdn的原理以及图示

cdn的原理:在用户和服务器之间增加cache层,通过接管DNS,将用户的请求引导到cache上获得服务器的资源。cdn主要包括两部分:负载均衡服务器和高速缓存服务器。

用户通过浏览器等方式访问网站的过程如图所示。


①用户在自己的浏览器中输入要访问的网站域名。

②浏览器向本地DNS服务器请求对该域名的解析。

③本地DNS服务器中如果缓存有这个域名的解析结果,则直接响应用户的解析请求。

④本地DNS服务器中如果没有关于这个域名的解析结果的缓存,则以递归方式向整个DNS系统请求解析,获得应答后将结果反馈给浏览器。

⑤浏览器得到域名解析结果,就是该域名相应的服务设备的IP地址。

⑥浏览器向服务器请求内容。

⑦服务器将用户请求内容传送给浏览器。

在网站和用户之间加入CDN以后,用户不会有任何与原来不同的感觉。最简单的CDN网络有一个DNS服务器和几台缓存服务器就可以运行了。一个典型的CDN用户访问调度流程如图所示。


①当用户点击网站页面上的内容URL,经过本地DNS系统解析,DNS系统会最终将域名的解析权交给CNAME指向的CDN专用DNS服务器。

②CDN的DNS服务器将CDN的全局负载均衡设备IP地址返回用户。

③用户向CDN的全局负载均衡设备发起内容URL访问请求。

④CDN全局负载均衡设备根据用户IP地址,以及用户请求的内容URL,选择一台用户所属区域的区域负载均衡设备,告诉用户向这台设备发起请求。

⑤区域负载均衡设备会为用户选择一台合适的缓存服务器提供服务,选择的依据包括:根据用户IP地址,判断哪一台服务器距用户最近;根据用户所请求的URL中携带的内容名称,判断哪一台服务器上有用户所需内容;查询各个服务器当前的负载情况,判断哪一台服务器尚有服务能力。基于以上这些条件的综合分析之后,区域负载均衡设备会向全局负载均衡设备返回一台缓存服务器的IP地址。

⑥全局负载均衡设备把服务器的IP地址返回给用户。

⑦用户向缓存服务器发起请求,缓存服务器响应用户请求,将用户所需内容传送到用户终端。如果这台缓存服务器上并没有用户想要的内容,而区域均衡设备依然将它分配给了用户,那么这台服务器就要向它的上一级缓存服务器请求内容,直至追溯到网站的源服务器将内容拉到本地。

DNS服务器根据用户IP地址,将域名解析成相应节点的缓存服务器IP地址,实现用户就近访问。使用CDN服务的网站,只需将其域名解析权交给CDN的GSLB设备,将需要分发的内容注入CDN,就可以实现内容加速了。

cdn的限制:其缺点也很明显:当网站更新时,如果CDN节点上数据没有及时更新,即便用户再浏览器使用Ctrl +F5的方式使浏览器端的缓存失效,也会因为CDN边缘节点没有同步最新数据而导致用户访问异常。这个时候需要我们在服务器端对CDN做强制更新。

参考文献:

https://www.douban.com/note/309710090/?type=rec#sep浏览器缓存机制详解

http://www.cnblogs.com/shytong/p/5456698.htmlCDN的实现原理

http://blog.csdn.net/coolmeme/article/details/9468743CDN的实现原理2

http://www.51testing.com/html/28/116228-238337.htmlhttp头信息中有关缓存的几个标签

http://www.cnblogs.com/Leo_wl/p/5686610.htmlhttp缓存与CDN缓存

http://www.cnblogs.com/ziyunfei/archive/2012/11/16/2772729.htm

304 响应

https://www.douban.com/note/161120791/304响应

http://www.cnblogs.com/czh-liyu/archive/2011/06/22/2087113.htmlif-modified-since 和etags/if-none-match 的对比分析

https://my.oschina.net/u/2617218/blog/674317   get post与缓存的关系

https://www.zhihu.com/question/22883627 etag跟last-Modified 比较

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

推荐阅读更多精彩内容