浏览器缓存原理简述

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浏览器缓存原理简述相关的知识,希望对你有一定的参考价值。

参考技术A

缓存文件存储方式有2种:内存和硬盘。为了提高文件读取速度,浏览器优先读内存中的缓存文件(如果存在的话)。

按照本地缓存阶段和协商缓存阶段分类:

缓存的策略由http消息头Cache-Control确定,以下为各个值对应的效果:
Cache-Control:public :所有内容都将被缓存(客户端和代理服务器都可缓存)
Cache-Control:private :所有内容只有客户端可以缓存
Cache-Control:no-cache :默认值。客户端缓存内容,但是是否使用缓存则需要经过协商缓存来验证决定
Cache-Control:no-store :所有内容都不会被缓存,即不使用强制缓存,也不使用协商缓存
Cache-Control:max-age=xxx (xxx is numeric) :缓存内容将在xxx秒后失效

HTTP1.0 的特性,标识该资源过期的时间点,它是一个绝对值,格林威治时间(Greenwich Mean Time, GMT),即在这个时间点之后,缓存的资源过期; 优先级:Cache-Control 优先级高于 Expires ,为了兼容,通常两个头部同时设置;浏览器默认行为:其实就算 Response Header 中没有设置 Cache-Control 和 Expires,浏览器仍然会缓存某些资源,这是浏览器的默认行为,是为了提升性能进行的优化,每个浏览器的行为可能不一致,有些浏览器甚至没有这样的优化。

Last-Modified (Response Header)与 If-Modified-Since (Request Header)是一对报文头,属于 http 1.0。

If-Modified-Since 是一个请求首部字段,并且只能用在 GET 或者 HEAD 请求中。Last-Modified 是一个响应首部字段,包含服务器认定的资源作出修改的日期及时间。当带着 If-Modified-Since 头访问服务器请求资源时,服务器会检查 Last-Modified,如果 Last-Modified 的时间早于或等于 If-Modified-Since 则会返回一个不带主体的 304 响应,否则将重新返回资源。

ETag 与 If-None-Match 是一对报文头,属于 http 1.1。

ETag 是一个响应首部字段,它是根据实体内容生成的一段 hash 字符串,标识资源的状态,由服务端产生。If-None-Match 是一个条件式的请求首部。如果请求资源时在请求首部加上这个字段,值为之前服务器端返回的资源上的 ETag,则当且仅当服务器上没有任何资源的 ETag 属性值与这个首部中列出的时候,服务器才会返回带有所请求资源实体的 200 响应,否则服务器会返回不带实体的 304 响应。

简述CDN的工作原理

CDN系统的具体工作方式是怎样的呢?先看看没有CDN服务时,一个网站是如何向用户提供服务的。

网站系统基本上都是基于B/S架构的。B/S架构,即Browser/Server(浏览器/服务器)架构,是对传统C/S架构的一种变化或者改进架构。在这种架构下,用户侧只需要使用通用浏览器,而主要业务逻辑都在服务器端实现。B/S架构利用不断成熟的WWW浏览器技术,结合浏览器的多种脚本语言(VBScript、JavaScript等)和ActiveX等技术,在通用浏览器上实现了C/S架构下需要复杂的软件才能实现的强大功能。

用户通过浏览器方式访问网站的过程如图:

简述CDN的工作原理_CDN

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

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

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

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

⑤浏览器得到的域名解析结果是该域名的相应服务设备的IP地址,浏览器会向这台服务器请求内容。

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

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

简述CDN的工作原理_CDN_02

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

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

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

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

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

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

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

从以上流程可以看出,CDN系统的专用DNS服务器根据用户IP地址将域名解析成相应节点的缓存服务器IP地址,从而实现了用户的就近访问。因此,使用CDN服务的网站,只需要将其域名解析权交给CDN的DNS服务器,再将分发的内容注入CDN,就可以实现内容加速了。

以上是关于浏览器缓存原理简述的主要内容,如果未能解决你的问题,请参考以下文章

简述 HTTP 缓存首部及其行为

HTTP缓存机制与原理

Nginx——nginx作为静态资源web服务(浏览器缓存原理)

浏览器缓存问题原理以及解决方案

(010)Nginx静态资源web服务_浏览器缓存原理与演示

(010)Nginx静态资源web服务_浏览器缓存原理与演示