一文带你了解什么是浏览器缓存,DNS,CDN及域名解析类型

 更新时间:2022年6月1日 13:35  点击:388

浏览器的缓存机制

当我们使用Ctrl+F5组合键刷新一个页面时,在HTTP的请求头中会增加一些请求头,
它告诉服务端我们要获取最新的数据而不是缓存。

Cache-Control

这个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通常的使用格式是Expires: Sat, 25 Feb 2012 12:22:17 GMT
后面跟着一个日期和时间,超过这个时间后,缓存的内容将失效。

Last-Modidified/Etag

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服务器都要记住网站的所有资源,
否则浏览器返回这个编号就没有意义了。

DNS域名解析过程

当一个用户在浏览器中输入www.jb51.net时,DNS解析将会有将近10个步骤,这个过程大体描述如下。

浏览器

浏览器会检查缓存中有没有这个域名对应的解析过的IP地址,
如果缓存中有,这个解析过程就将结束。

浏览器缓存域名也是有限制的,不仅浏览器缓存大小有限制,而且缓存的时间也有限制,
通常情况下为几分钟到几小时不等,
域名被缓存的时间限制可以通过TTL属性来设置。

操作系统

如果用户的浏览器缓存中没有,浏览器会查找操作系统缓存中是否有这个域名对应的DNS解析结果。

其实操作系统也会有一个域名解析的过程,
在Windows中可以通过C:\Windows\System32\drivers\etc\hosts文件来设置,
你可以将任何域名解析到任何能够访问的IP地址。

在Linux中这个配置文件是/etc/hosts
当解析到这个配置文件中的某个域名时,操作系统会在缓存中缓存这个解析结果,
缓存的时间同样是受这个域名的失效时间和缓存的空间大小控制的。

本地区的域名服务器

如果在本机中仍然无法完成域名的解析,就会真正请求域名服务器来解析这个域名了。

在我们的网络配置中都会有“DNS服务器地址”这一项,
操作系统会把这个域名设置为本地区的域名服务器(LNDS)。

这个DNS通常都提供给你本地互联网接入的一个DNS解析服务,
例如,你是在学校接入互联网,那么你的DNS服务器肯定在你的学校,
如果你是在一个小区接入互联网,那这个DNS就是提供给你接入互联网的应用提供商,即电信或者联通。

这个专门的域名解析服务器性能都会很好,它们一般都会缓存域名解析结果,
当然缓存时间是受域名的失效时间控制的。

Root Server域名服务器

如果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域名服务器。

Local DNS Server缓存

返回该域名对应的IP和TTL值,Local DNS Server会缓存这个域名和IP的对应关系,
缓存的时间由TTL值控制。

本地系统缓存

把解析的结果返回给用户,用户根据TTL值缓存在本地系统缓存中,域名解析过程结束。

注:在实际的DNS解析过程中,可能还不止这10个步骤,
如Name Server也可能有很多级,或者有一个GTM来负载均衡控制,
这都有可能会影响域名解析的过程。

几种域名解析方式

域名解析记录主要分为A记录,MX记录,CNAME记录,NS记录,和TXT记录。

A记录

A代表Address,用来指定域名对应的IP地址,
A记录可以将多个域名解析到一个IP地址,但是不能将一个域名解析到多个IP地址。

MX记录

MX表示Mail Exchange,就是可以将某个域名下的邮件服务器指向自己的Mail Server,
DNS会将邮件发送到MX记录的服务器,而正常通过Web请求的话,仍然解析到A记录的IP地址。

CNAME记录

CNAME全称为Canonial Name(别名解析)。
所谓别名解析就是可以为一个域名设置一个或者多个别名。

NS记录

NS记录,为某个域名指定DNS解析服务器,也就是这个域名由指定的IP地址的DNS服务器去解析。

TXT记录

为某个主机名或域名设置说明。

CDN工作机制

CDN也就是内容分布网络(Content Delivery Network),它是构筑在现有Internet上的一种先进的流量分配网络。
其目的是通过在现有的Internet中增加一层新的网络架构,
将网站的内容发布到最接近用户的网络“边缘”,使用户可以就近取得所需的内容,
提高用户访问网站的响应速度。

目前CDN都以缓存网站中的静态数据为主,如CSS,JS,图片和静态页面等数据。
用户在先从主站服务器请求到动态内容后,再从CDN上下载这些静态资源,从而加速网页数据内容的下载速度。

CDN架构

一个用户访问某个静态文件(如CSS文件),这个静态文件的域名假如是cdn.jb51.net
那么首先要向Local DNS服务器发起请求,
一般经过迭代解析后回到这个域名的注册服务器去解析,一般每个公司都会有一个DNS解析服务器。

这时这个DNS解析服务器通常会把它重新CNAME解析到另一个另外一个域名,
而这个域名最终会被指向CDN全局中的DNS负载均衡服务器,再由这个GTM来最终分配是哪个地方的访问用户,
返回给离这个访问用户最近的CDN节点。

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

本文介绍的内容作为一名站长来说是必须要知道的知识,更多关于这方面的知识请查看下面的相关链接

原文出处:https://www.jianshu.com/p/4b0487851b68

[!--infotagslink--]

相关文章

  • Cloudflare国内自选IP节点整理收录

    一般来说为了达到隐藏自身 IP,我们都会选择一些 CDN 服务,目前用的最多的免费 CDN 是 Cloudflare。但是正常情况下 Cloudflare 是不能自己选择IP,有时候分配给我们的 IP 可能表现不佳,也只能将就着用。但是我们都希望可以用上 CF 比较快的 IP。那么自选IP,就显得很必要了。...2022-09-23
  • 2022年最新Cloudflare免费自选IP教程(非Partner)

    写在开头众所周知,CF在去年底大规模禁用Host API key,使得Partner自选法失效.但最近,Cloudflare为所有计划添加了100个SaaS域免费额度(以前$2一个).经过一番摸索,这个船新的...2022-09-23
  • golang DNS服务器的简单实现操作

    这篇文章主要介绍了golang DNS服务器的简单实现操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-01
  • Nginx DNS resolver配置实例

    这篇文章主要介绍了Nginx DNS resolver配置实例,本文讲解在proxy_pass 和 upstream server 通信的时候需要手动指定 resolver,本文就给出了配置实例,需要的朋友可以参考下...2016-01-27
  • docker内网搭建dns使用域名访问替代ip:port的操作

    这篇文章主要介绍了docker内网搭建dns使用域名访问替代ip:port的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-22
  • Nginx服务器中浏览器本地缓存和虚拟机的相关设置

    这篇文章主要介绍了Nginx服务器中浏览器本地缓存和虚拟机的相关设置,是Nginx服务器搭建过程中的基本配置,需要的朋友可以参考下...2016-01-27
  • php与浏览器缓存机制介绍

    浏览器的缓存策略,会暂时将浏览过的文件缓存在本地磁盘。当用户重复请求页面时,告知客户端页面并没有发生改变,可以调用缓存。 那么如何知道客户端是否有页面缓存呢?从 H...2016-11-25
  • 解决WordPress使用CDN后博文无法评论的错误

    这篇文章主要介绍了解决WordPress使用CDN后博文无法评论的错误的方法,同时提醒注意WordPress使用版本的jQuery版本支持度,需要的朋友可以参考下...2015-12-17
  • linux中查询dns示例

    这篇文章主要介绍了linux中查询dns示例,需要的朋友可以参考下...2020-04-25
  • 在Win2003中安装bind教程(部署智能DNS)

    有些公司技术力量薄弱一些,一直在用windows系统,所以本文从windows出发,安装bind,利用它的view功能,做智能DNS,解决双线机房南北电信联通访问问题...2016-01-27
  • Windows Server 2008 R2 DNS 服务器迁移方法

    近来为客户部署VSphere的虚拟化数据中心,所有部署、迁移操作实施完成后,客户又提出一个新的小要求:原生产环境中有一台DNS服务器,上面部署有一些应用,但年久失修处于淘汰状态,但是其上面有个DNS服务,还是要使用的,希望只将DNS服务迁移到虚拟化平台上...2016-01-27
  • win2003 配置DNS、NAT及搭建IIS网站的方法

    公司内部架设了一台DNS服务器,现在公司内部的员工想要访问公网上的网站,必须通过公司内部的DNS服务器进行解析,请试图搭出一个这样的环境...2016-01-27
  • php控制页面浏览器缓存与启用gzip传送

    本文章来给各位同学介绍php控制页面浏览器缓存与启用gzip传送页面方法,希望此代码对各位同这会有所帮助,同时没有服务器权限的朋友可这样来实现服务器gzip页面传输。...2016-11-25
  • php 浏览器缓存

    浏览器缓存,就完全不是那么回事了,缓存内容存储在浏览器本地,而内容却由web服务器生成,任何一方都不可能独立完成这一系统过程,所以它们之间必须有一种沟通机制,这就是http中...2016-11-25
  • PHP 浏览器缓存的各种操作方法

    PHP 中的 header() 函数,发送特定的缓存控制原始 HTTP 标头,header() 必须在任何实际输出之前调用,不论是来自普通的 HTML 标记,空行或者 PHP。在中文环境下,一个全角的空...2016-11-25
  • Win7系统日志提示在没有配置的 DNS 服务器响应之后,名称“域名”的名称解析超时的解放方法

    用Windows 7而且又偶尔会关心一下日志的TX可能会发现在网络情况不好的情况下经常可以发现类似下图的系统日志提示“在没有配置的 DNS 服务器响应之后,名称域名的名称解析超时”的记录,同时你的网络连接会中断或受限,只有先把网卡禁用再启用才会恢复正常。...2016-01-27
  • windows2003 DNS服务器配置(图文详解)

    目前很多企业事业单位都建立了单位内部的局域网,网络内部都配备相关的服务器(如web、ftp等服务器)。内部网络的用户都希望所有的服务器都用域名来访问,网络管理员可以采用在内部搭建DNS服务器的方式来实现...2016-01-27
  • PHP设置图片浏览器缓存方法介绍

    不管你是使用php打开浏览器缓存还是使用apache,iis服务器环境来配置我们都是会针对浏览器的Cache-Control来操作,下面我来给大家介绍PHP设置图片浏览器缓存 Cache-...2016-11-25
  • php 全面禁止浏览器缓存页面内容详解

    本文章来给大家介绍如何在php中利用相关保代码来禁止浏览器缓存页面内容,在php中我们只要使用header命令带一些参数即可实例。 代码 代码如下 复制代码...2016-11-25
  • C#实现一键换IP、重置DNS、网关及掩码的方法

    这篇文章主要介绍了C#实现一键换IP、重置DNS、网关及掩码的方法,很实用的功能,需要的朋友可以参考下...2020-06-25