八亿电脑网
游戏盒子
当前位置: 首页 > 八亿电脑 > 电脑知识 >

CDN缓存是什么(2)

时间:2015-12-24 14:34来源:网络 作者:win8e 点击:
游戏盒子

  Max-age 使用秒来计量,如:

  Cache-Control:max-age=645672

  指定页面645672秒(7.47天)后过期。

  Last-ModifIEd

  服务器为了通知浏览器当前文件的版本,会发送一个上次修改时间的标签,例如:

  Last-ModifIEd:Tue, 06 Jan 2015 08:26:32 GMT

八亿电脑网

  这样浏览器就知道他收到的这个文件创建时间,在后续的请求中,浏览器会按照下面的规则进行验证:

  1. 浏览器:Hey,我需要jquery.min.js这个文件,如果是在 Tue, 06 Jan 2015 08:26:32 GMT 之后修改过的,请发给我。

  2. 服务器:(检查文件的修改时间)

  3. 服务器:Hey,这个文件在那个时间之后没有被修改过,你已经有最新的版本了。

  4. 浏览器:太好了,那我就显示给用户了。

  在这种情况下,服务器仅仅返回了一个304的响应头,减少了响应的数据量,提高了响应的速度。

  下图是按F5刷新页面后,页面返回304响应头。

八亿电脑网

  ETag

  通常情况下,通过修改时间来比较文件是可行的。但是在一些特殊情况,例如服务器的时钟发生了错误,服务器时钟进行修改,夏时制DST到来后服务器时间没有及时更新,这些都会引起通过修改时间比较文件版本的问题。

  ETag可以用来解决这种问题。ETag是一个文件的唯一标志符。就像一个哈希或者指纹,每个文件都有一个单独的标志,只要这个文件发生了改变,这个标志就会发生变化。

  服务器返回ETag标签:

  ETag:"39001d-1762a-50bf790757e00"

八亿电脑网

  接下来的访问顺序如下所示:

  1. 浏览器:Hey,我需要jquery.min.js这个文件,有没有不匹配"39001d-1762a-50bf790757e00"这个串的

  2. 服务器:(检查ETag…)

  3. 服务器:Hey,我这里的版本也是"39001d-1762a-50bf790757e00",你已经是最新的版本了

  4. 浏览器:好,那就可以使用本地缓存了

  如同 Last-modifIEd 一样,ETag 解决了文件版本比较的问题。只不过 ETag 的级别比 Last-ModifIEd 高一些。

  额外的标签

  缓存标签永远不会停止工作,但是有时候我们需要对已经缓存的内容进行一些控制。

  Cache-control: public 表示缓存的版本可以被代理服务器或者其他中间服务器识别。

  Cache-control: private 意味着这个文件对不同的用户是不同的。只有用户自己的浏览器能够进行缓存,公共的代理服务器不允许缓存。

  Cache-control: no-cache 意味着文件的内容不应当被缓存。这在搜索或者翻页结果中非常有用,因为同样的URL,对应的内容会发生变化。

八亿电脑网

  浏览器缓存刷新

  1. 在地址栏中输入网址后按回车或点击转到按钮

  浏览器以最少的请求来获取网页的数据,浏览器会对所有没有过期的内容直接使用本地缓存,从而减少了对浏览器的请求。所以,Expires,max-age标记只对这种方式有效。

  2. 按F5或浏览器刷新按钮

  浏览器会在请求中附加必要的缓存协商,但不允许浏览器直接使用本地缓存,它能够让 Last-ModifIEd、ETag发挥效果,但是对Expires无效。

  3. 按Ctrl+F5或按Ctrl并点击刷新按钮

  这种方式就是强制刷新,总会发起一个全新的请求,不使用任何缓存。

  CDN缓存

  浏览器本地缓存失效后,浏览器会向CDN边缘节点发起请求。类似浏览器缓存,CDN边缘节点也存在着一套缓存机制。

  CDN缓存的缺点

  CDN的分流作用不仅减少了用户的访问延时,也减少的源站的负载。但其缺点也很明显:当网站更新时,如果CDN节点上数据没有及时更新,即便用户再浏览器使用Ctrl +F5的方式使浏览器端的缓存失效,也会因为CDN边缘节点没有同步最新数据而导致用户访问异常。

  CDN缓存策略

  CDN边缘节点缓存策略因服务商不同而不同,但一般都会遵循http标准协议,通过http响应头中的Cache-control: max-age的字段来设置CDN边缘节点数据缓存时间。

  当客户端向CDN节点请求数据时,CDN节点会判断缓存数据是否过期,若缓存数据并没有过期,则直接将缓存数据返回给客户端;否则,CDN节点就会向源站发出回源请求,从源站拉取最新数据,更新本地缓存,并将最新数据返回给客户端。

本篇文章标签: 电脑 系统 软件 输入法 工具软件
发表评论