这篇文章主要介绍“浏览器缓存,DNS,CDN及域名解析的过程是怎样的”,在日常操作中,相信很多人在浏览器缓存,DNS,CDN及域名解析的过程是怎样的问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”浏览器缓存,DNS,CDN及域名解析的过程是怎样的”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
当我们使用Ctrl+F5组合键刷新一个页面时,在HTTP的请求头中会增加一些请求头,
它告诉服务端我们要获取最新的数据而不是缓存。
这个HTTP Head字段用于指定所有缓存机制在整个请求/响应链中必须服从的指令。
可选值 | 说明 |
---|---|
Public | 所有内容都将被缓存,在响应头中设置 |
Private | 内容只缓存到私有缓存中,在响应头中设置 |
no-cache | 所有内容都不会被缓存,在请求头和响应头中设置 |
no-store | 所有内容都不会被缓存到缓存或Internet临时文件中,在响应头中设置 |
must-revalidation/proxy-revalidation | 如果缓存的内容失败,请求必须发送到服务器/代理以进行重新验证,在请求头中设置 |
max-age=xxx | 缓存的内容将在xxx秒后失效,这个选项只在HTTP 1.1中可用,和Last-Modified一起使用时优先级较高,在响应头中设置 |
Cache-Control请求字段被各个浏览器支持的较好,而且它的优先级也比较高,
它和其他一些请求字段(如Expires)同时出现时,Cache-Control会覆盖掉其他字段。
Expires通常的使用格式是Expires: Sat, 25 Feb 2012 12:22:17 GMT
,
后面跟着一个日期和时间,超过这个时间后,缓存的内容将失效。
Last-Modified字段一般用于表示一个服务器上的资源的最后修改时间,
资源可以是静态(静态内容自动加上Last-Modified字段),
或者动态的内容(如Servlet提供了一个getLastModified方法,用于检查某个动态内容是否已经更新),
通过这个最后修改时间可以判断当前请求的资源是否是最新的。
一般服务器端在响应头中返回一个Last-Modified子弹,告诉浏览器这个页面的最后修改时间,
如Last-Modified: Sat, 25 Feb 2012 12:55:04 GMT
,浏览器再次请求时,
在请求头中增加一个If-Modified-Since: Sat, 25 Feb 2012 12:55:04 GMT
字段,
询问当前缓存的页面是否是最新的,如果是最新的就返回304状态码,告诉浏览器是最新的,服务器也不会传输新的数据。
与Last-Modified字段有类似功能的还有一个Etag字段,
这个字段的作用是让服务器给每个页面分配一个唯一的编号,
然后通过这个编号来区分当前这个页面是否最新的。
这种方式比使用Last-Modified更加灵活,但是在后端的Web服务器有多台时比较难处理,
因为每个Web服务器都要记住网站的所有资源,
否则浏览器返回这个编号就没有意义了。
当一个用户在浏览器中输入www.yisu.com
时,DNS解析将会有将近10个步骤,这个过程大体描述如下。
浏览器会检查缓存中有没有这个域名对应的解析过的IP地址,
如果缓存中有,这个解析过程就将结束。
浏览器缓存域名也是有限制的,不仅浏览器缓存大小有限制,而且缓存的时间也有限制,
通常情况下为几分钟到几小时不等,
域名被缓存的时间限制可以通过TTL属性来设置。
如果用户的浏览器缓存中没有,浏览器会查找操作系统缓存中是否有这个域名对应的DNS解析结果。
其实操作系统也会有一个域名解析的过程,
在Windows中可以通过C:\Windows\System32\drivers\etc\hosts
文件来设置,
你可以将任何域名解析到任何能够访问的IP地址。
在Linux中这个配置文件是/etc/hosts
,
当解析到这个配置文件中的某个域名时,操作系统会在缓存中缓存这个解析结果,
缓存的时间同样是受这个域名的失效时间和缓存的空间大小控制的。
如果在本机中仍然无法完成域名的解析,就会真正请求域名服务器来解析这个域名了。
在我们的网络配置中都会有“DNS服务器地址”这一项,
操作系统会把这个域名设置为本地区的域名服务器(LNDS)。
这个DNS通常都提供给你本地互联网接入的一个DNS解析服务,
例如,你是在学校接入互联网,那么你的DNS服务器肯定在你的学校,
如果你是在一个小区接入互联网,那这个DNS就是提供给你接入互联网的应用提供商,即电信或者联通。
这个专门的域名解析服务器性能都会很好,它们一般都会缓存域名解析结果,
当然缓存时间是受域名的失效时间控制的。
如果LDNS仍然没有命中,就直接到Root Server域名服务器请求解析。
根域名服务器返回给本地域名服务器一个所查询的主域名服务器(gTLD Server)地址。
gTLD是国际顶级域名服务器,如.com
,.cn
,.org
等,全球只有13台左右。
本地域名服务器(Local DNS Server)再向上一步返回的gTLD服务器发送请求。
接受请求的gTLD服务器查找并返回此域名对应的Name Server域名服务器的地址,
这个Name Server通常就是你注册的域名服务器。
例如,你在某个域名服务器提供商申请的域名,那么这个域名解析任务就由这个域名提供商的服务器来完成。
Name Server域名服务器会查询存储在域名和IP的映射关系表,
在正常情况下会根据域名得到目标IP记录,连同一个TTL值返回给DNS Server域名服务器。
返回该域名对应的IP和TTL值,Local DNS Server会缓存这个域名和IP的对应关系,
缓存的时间由TTL值控制。
把解析的结果返回给用户,用户根据TTL值缓存在本地系统缓存中,域名解析过程结束。
注:在实际的DNS解析过程中,可能还不止这10个步骤,
如Name Server也可能有很多级,或者有一个GTM来负载均衡控制,
这都有可能会影响域名解析的过程。
域名解析记录主要分为A记录,MX记录,CNAME记录,NS记录,和TXT记录。
A代表Address,用来指定域名对应的IP地址,
A记录可以将多个域名解析到一个IP地址,但是不能将一个域名解析到多个IP地址。
MX表示Mail Exchange,就是可以将某个域名下的邮件服务器指向自己的Mail Server,
DNS会将邮件发送到MX记录的服务器,而正常通过Web请求的话,仍然解析到A记录的IP地址。
CNAME全称为Canonial Name(别名解析)。
所谓别名解析就是可以为一个域名设置一个或者多个别名。
NS记录,为某个域名指定DNS解析服务器,也就是这个域名由指定的IP地址的DNS服务器去解析。
为某个主机名或域名设置说明。
CDN也就是内容分布网络(Content Delivery Network),它是构筑在现有Internet上的一种先进的流量分配网络。
其目的是通过在现有的Internet中增加一层新的网络架构,
将网站的内容发布到最接近用户的网络“边缘”,使用户可以就近取得所需的内容,
提高用户访问网站的响应速度。
目前CDN都以缓存网站中的静态数据为主,如CSS,JS,图片和静态页面等数据。
用户在先从主站服务器请求到动态内容后,再从CDN上下载这些静态资源,从而加速网页数据内容的下载速度。
一个用户访问某个静态文件(如CSS文件),这个静态文件的域名假如是cdn.jb51.net
,
那么首先要向Local DNS服务器发起请求,
一般经过迭代解析后回到这个域名的注册服务器去解析,一般每个公司都会有一个DNS解析服务器。
这时这个DNS解析服务器通常会把它重新CNAME解析到另一个另外一个域名,
而这个域名最终会被指向CDN全局中的DNS负载均衡服务器,再由这个GTM来最终分配是哪个地方的访问用户,
返回给离这个访问用户最近的CDN节点。
拿到DNS解析结果,用户就直接去这个CDN节点访问这个静态资源文件了,
如果这个节点中所请求的文件不存在,就会再回到源站去获取这个文件,然后再返回给用户。
到此,关于“浏览器缓存,DNS,CDN及域名解析的过程是怎样的”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。