web服务器响应请求时告诉浏览器的缓存副本是否足够新

日期: 栏目:文章分享 浏览:837 评论:0

Cache-策略导向图

Last-/If--Since

Last-/If--Since要配合Cache-使用。

Last-:标示这个响应资源的最后修改时间。web服务器在响应请求时,告诉浏览器资源的最后修改时间。

If--Since:当资源过期时(使用Cache-标识的max-age),发现资源具有Last-声明,则再次向web服务器请求时带上头 If--Since浏览器怎么修改dns,表示请求时间。web服务器收到请求后发现有头If--Since 则与被请求资源的最后修改时间进行比对。若最后修改时间较新,说明资源又被改动过,则响应整片资源内容(写在响应消息包体内),HTTP 200;若最后修改时间较旧,说明资源无新修改,则响应HTTP 304 (无需包体,节省浏览),告知浏览器继续使用所保存的cache。

Etag/If-None-Match(优先级比last-高,缓存过期后先判断有没有etag声明再判断有没有last-声明)

Etag/If-None-Match也要配合Cache-使用。

Etag:web服务器响应请求时,告诉浏览器当前资源在服务器的唯一标识(生成规则由服务器觉得)。中,ETag的值,默认是对文件的索引节(INode),大小(Size)和最后修改时间(MTime)进行Hash后得到的。

If-None-Match:当资源过期时(使用Cache-标识的max-age),发现资源具有Etage声明,则再次向web服务器请求时带上头If-None-Match (Etag的值)。web服务器收到请求后发现有头If-None-Match 则与被请求资源的相应校验串进行比对,决定返回200或304。

PS

使用Last-已经足以让浏览器知道本地的缓存副本是否足够新,为什么还需要Etag(实体标识)呢?HTTP1.1中Etag的出现主要是为了解决几个Last-比较难解决的问题:

Last-标注的最后修改只能精确到秒级,如果某些文件在1秒钟以内,被修改多次的话,它将不能准确标注文件的修改时间如果某些文件会被定期生成,当有时内容并没有任何变化,但Last-却改变了,导致文件没法使用缓存有可能存在服务器没有准确获取文件修改时间,或者与代理服务器时间不一致等情形

Etag是服务器自动生成或者由开发者生成的对应资源在服务器端的唯一标识符,能够更加准确的控制缓存。Last-与ETag是可以一起使用的,服务器会优先验证ETag,一致的情况下,才会继续比对Last-,最后才决定是否返回304。

DNS域名解析

术语解释:

根域,就是所谓的“.”,其实我们的网址在配置当中应该是(最后有一点),一般我们在浏览器里输入时会省略后面的点,而这也已经成为了习惯。根域服务器我们知道有13台,但是这是错误的观点。根域服务器只是具有13个IP地址,但机器数量却不是13台,因为这些IP地址借助了任播的技术,所以我们可以在全球设立这些IP的镜像站点,你访问到的这个IP并不是唯一的那台主机。

域名后缀,国际顶级域名,有两种划分方式,一种互联网刚兴起时的按照行业性质划分的com.,net.等,一种是按国家划分的如cn.,jp.,等。每个域都会有域名服务器,也叫权威域名服务器。

顶级域或者叫做一级域,就是一个顶级域名,而却不是顶级域名,他是在 这个域里的一叫做www的主机。

二级域,三级域,只要我买了一个顶级域,并且我搭建了自己BIND服务器(或者其他软件搭建的)注册到互联网中,那么我就可以随意在前面多加几个域了(当然长度是有限制的)。比如a.,在这个网址中,变成了一个二级域而不是一台主机,主机名是a。

域名服务器,能提供域名解析的服务器,上面的记录类型可以是A()记录,NS记录(name ),MX(mail),CNAME等。

A记录,A代表的是,用户可以在此设置子域名并指向到自己的目标主机地址上,从而实现通过域名找到服务器。指向的目标主机地址类型只能使用IP地址,如将域名下的指定到115.238.33.11,指定到112.134.22.34。A记录可以将多个域名解析到一个IP地址,但不能将一个域名解析到多个IP地址。

MX记录,表示的是Mail (邮件交换记录),用于将以该域名为结尾的电子邮件指向对应的邮件服务器以进行处理。如:用户所用的邮件是以域名为结尾的,则需要在管理界面中添加该域名的MX记录来处理所有以@结尾的邮件。

说明:MX记录可以使用主机名或IP地址;·MX记录可以通过设置优先级实现主辅服务器设置,“优先级”中的数字越小表示级别越高。也可以使用相同优先级(即随机)达到负载均衡的目的;·如果在“主机名”中填入子域名则此MX记录只对该子域名生效。

CNAME记录,全称是 Name(别名解析)。可以为一个域名设置一个或者多个别名。

说明:CNAME的目标主机地址只能使用主机名,不能使用IP地址;·主机名前不能有任何其他前缀,如:等是不被允许的;A记录优先于CNAME记录。即如果一个主机地址同时存在A记录和CNAME记录,则CNAME记录不生效。

NS记录,解析服务器记录,为某个域名指定DNS解析服务器,也就是这个域名由指定的IP地址的DNS域名服务器去解析。例如用户希望由12.34.56.78这台服务器解析,则需要设置的NS记录。

说明:“优先级”中的数字越小表示级别越高;·“IP地址/主机名”中既可以填写IP地址,也可以填写像这样的主机地址,但必须保证该主机地址有效。如将的NS记录指向到,在设置NS记录的同时还需要设置的指向,否则NS记录将无法正常解析;NS记录优先于A记录。即,如果一个主机地址同时存在NS记录和A记录,则A记录不生效。这里的NS记录只对子域名生效。

TXT记录,为某个主机名或域名设置说明,如可以为设置TXT记录为“天下第一”这样的说明。

DNS解析过程

当用户在浏览器中输入域名并按下回车键后

第一步:浏览器会检查缓存中有没有这个域名对应的解析过的IP地址,如果有,这个解析过程就结束了,直接拿到IP进行访问。这个浏览器缓存域名是有限制的,除了缓存大小有限制,缓存的时间也有限制,通常情况下由TTL属性来设置。

第二步:如果用户浏览器缓存中没有,浏览器会查找操作系统中是否有这个域名对应的DNS解析结果。中c:////etc/hosts文件设置,linux中/etc/hosts文件中设置。当解析到这个配置文件中的某个域名时,操作系统会在缓存中缓存这个解析结果。(修改文件后不立即生效的原因)

第三步:在网络配置中都会有“DNS服务器地址”这一项,当前面两步都不能解析时,操作系统会把这个域名发送给设置的DNS服务器(简称LDNS)-local缩写,一般是本地区的域名服务器也可以是自己设置的域名服务器地址,如果命中,那解析就此结束并返回IP并标记为非权威服务器的应答。如是学校的互联网,那么你的DNS服务器肯定在你的学校,如果你是一个小区接入互联网,那这个DNS就是提供给你接入互联网的应用供应商,即电信或联通。中能用查看DNS服务器地址,linux中cat /etc/.conf查看DNS 。

第四步:如果LDNS没有命中,LDNS就会向Root 域名服务器请求解析。LDNS会从配置文件里面读取13个根域名服务器的地址(这些地址是不变的,直接在BIND的配置文件中),然后像其中一台发起请求。

第五步:根服务器拿到这个请求后,知道他是com.这个顶级域名下的,所以就会返回com.域中的NS记录,一般来说是13台主机名和IP(主域名服务器地址即gTLD-国际顶级域名服务器地址),返回给本地域名服务器即LDNS,

第六步:LDNS再向上一步返回的其中一台gTLD服务器发送请求。com.域的服务器(gTLD)发现你这请求是这个域的,一查发现了这个域的NS(一般就是你注册的域名服务器),那就返回给你,你再去查。

第七步:LDNS接受gTLD返回的域服务器地址(即域名服务提供商的域服务器)并向其中一台再次发起请求,在的域下面查了下有www的这台主机,就把这个IP返回给你了。

第八步:LDNS接受返回的IP和TLL值

第九步:LDNS缓存这个域名和IP的对应关系,缓存时间有TLL控制

第十步:LDNS把解析的结果返回给用户,用户根据TLL值缓存在本地系统缓存中,域名解析结束。

ps:

一般经历从根域名(.)到gTLD (.com.)到Name (.)

DNS的服务器有多个备份,可以从任何一台查询到解析结果。

跟踪域名解析过程的命令

查询域名的解析结果linux&

dig host +trace查询DNS的解析过程linux

清除缓存的域名

/刷新缓存

/etc/init.d/nscd 重启linux

JVM也会缓存DNS的解析结果,这个缓存是在类中完成的,而且这个缓存时间比较特殊,它有两种策略:一种是正确解析结果缓存,另一种是失败的解析结果缓存。这两个缓存时间由两个配置项控制,配置项在%%\lib\\java.文件中。两个配置项分别是.cache.ttl和.cache..tll,默认值分别是-1(永不失效)和10(缓存10秒)。

..tll=***可以来修改默认值,类也可以动态修改。

CDN( )

CDN也就是内容分布网络( ),它是构筑在现有 上的一种先进的流量分配网络。其目的是通过在现有的 中增加一层新的网络架构,将网站的内容发布到最接近用户的网络"边缘",使用户可以就近取得所需的内容,提高用户访问网站的响应速度。有别于镜像,它比镜像更智能,可以做这样一个比喻:CDN = 镜像()+ 缓存(Cache)+ 整体负载均衡(GSLB)。因而,CDN 可以明显提高 中信息流动的效率。

目前CDN都以缓存网站中的静态数据为主,如CSS、JS、图片和静态页面等数据。用户在从主站服务器请求到动态内容后再从CDN上下载这些静态数据,从而加速网页数据内容的下载速度,如淘宝有90%以上的数据都是由CDN来提供的。

CDN架构

一个用户访问某个静态文件(如CSS文件)浏览器怎么修改dns,这个静态文件的域名假如是,那么首先要向Local DNS服务器发起请求,一般经过迭代解析后回到这个域名的注册服务器去解析,一般每个公司都会有一个DNS解析服务器。这时这个DNS解析服务器通常会把它重新CNAME解析到另外一个域名,重新从.(根域名)发起对这个域名的解析,而这个域名最终会被指向CDN全局中的DNS负载均衡服务器,再由这个GTM来最终分配是哪个地方的访问用户,返回给离这个访问用户最近的CDN节点。

拿到DNS解析结果,用户就直接去这个CDN节点访问这个静态文件了,如果这个节点中所请求的文件不存在,就会再回到源站去获取这个文件,然后再返回给用户。

负载均衡

负载均衡(Load )就是对工作任务进行平衡、分摊到多个操作单元上执行,如图片服务器、应用服务器等,共同完成工作任务。它可以提高服务器响应速度及利用效率,避免软件或者硬件模块出现单点失效,解决网络拥塞问题,实现地理位置无关性,为用户提供较一致的访问质量。

通常有三种负载均衡架构,分别是链路负载均衡、集群负载均衡和操作系统负载均衡。

链路负载均衡也就是前面提到的通过DNS解析成不同的IP,然后用户根据这个IP来访问不同的目标服务器。负载均衡是由DNS的解析来完成的,用户最终访问哪个Web 是由DNS 来控制的,在这里就是由 DNS 来动态解析域名服务。这种DNS解析的优点是用户会直接访问目标服务器,而不需要经过其他的代理服务器,通常访问速度会更快。但是也有缺点,由于DNS在用户本地和Local DNS 都有缓存,一旦某台Web 挂掉,那么很难及时更新用户的域名解析结构。如果用户的域名没有及时更新,那么用户将无法访问这个域名,带来的后果非常严重。

集群负载均衡是另外一种常见的负载均衡方式,它一般分为硬件负载均衡和软件负载均衡。

硬件负载均衡一般使用一台专门硬件设备来转发请求,硬件负载均衡的关键就是这台价格非常昂贵的设备,如F5,通常为了安全需要一主一备。它的优点很显然就是性能非常好,缺点就是非常贵,一般公司是用不起的,还有就是当访问量陡然增大超出服务极限时,不能进行动态扩容。

软件负载均衡是使用最普遍的一种负载方式,它的特点是使用成本非常低,直接使用廉价的PC就可以搭建。缺点就是一般一次访问请求要经过多次代理服务器,会增加网络延时。两台是LVS,使用四层负载均衡,也就是在网络层利用IP地址进行地址转发。下面三台使用进行七层负载,也就是可以根据访问用户的HTTP请求头来进行负载均衡,如可以根据不同的URL来将请求转发到特定机器或者根据用户的信息来指定访问的机器。

操作系统负载均衡,就是利用操作系统级别的软中断或者硬件中断来达到负载均衡,如可以设置多队列网卡等来实现。

CDN动态加速

CDN动态加速技术原理是在CDN的DNS解析中通过动态的链路探测来寻找回源最好的一条路径,然后通过DNS的调度将所以请求调度到选定的这条路径上回源,从而加速用户访问的效率。

由于CDN节点是遍布全国的,所有用户接入一个CDN节点后可以选择一条从离用户最近的CDN节点到原站链路最好的路径让用户走。一个简单的原则就是从源站上下载一个指定大小的文件,看哪个链路耗时最短,这样可以构成一个链路列表然后绑定到DNS解析上,更新到CDN的LDNS

标签:

评论留言

我要留言

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。发布前请先查看评论规则:点我查看