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

浏览器的缓存机制

当我们使用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节点访问这个静态资源文件了,
如果这个节点中所请求的文件不存在,就会再回到源站去获取这个文件,然后再返回给用户。

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

(0)

相关推荐

  • Linux下修改IP、DNS和路由命令行配置方法

    一.快速修改,重启后设置就没了 ifconfig eth0 192.168.1.22 netmask 255.255.255.0 up route add default gw 192.168.1.2 二.修改配置文件,重启设置还在 (一)ubuntu 版本命令行设置静态IP 修改 /etc/network/interfaces # This filedescribes the networ k interfaces available onyour system # and how toact

  • 阿里云服务器实现域名解析步骤(小白教程)

    对于刚开始接触网站搭建的新手来说,好多东西都需要去了解学习,搭建网站首先需要购买服务器,然后购买域名,然后是域名解析,最后是域名备案等这些大的流程步骤.本节就来将将域名解析的步骤,服务器是以阿里云服务器来讲,其他平台的服务器暂时不介绍.具体步骤如下所示. 一.打开进入阿里云官网,然后登陆阿里云账号,进入控制台. 二.在控制台主界面,找到左侧菜单栏里面的下拉菜单,并找到"域名"选项,地球图标的那个选项,单击进入域名控制台. 三.进入域名控制台之后,可以看到该阿里云账号下面的域名,然后点击

  • 利用CDN加速react webpack打包后的文件详解

    此文不介绍webpack基本配置,如果对基本配置有疑问请查阅官方文档. 1.配置webpack.config.js 将output.publicPath改成上传到的cdn地址, 例(对应上面上传配置): publicPath: "https://your_base_cdn_url" + process.env.NODE_ENV + "/cdn/" 打包 NODE_ENV=production node_modules/webpack/bin/webpack.js -

  • 网站加速之CDN、SCDN、DCDN区别在哪?如何选择?

    1.CDN 是网站中最常用的加速功能.通过分布式服务器布局,把网站业务内容缓存到各地的云服务器中,供访客就近访问.所以使用了 CDN 的网站业务,打开速度特别快. 局限性在于普通CDN加速只给静态内容加速,比如图片.文档等. 2.SCDN SCDN(Secure Content Delivery Network),即拥有安全防护能力的CDN服务,提供稳定加速的同时,智能预判攻击行为,通过智能的调度系统将DDoS攻击请求切换至高防IP完成清洗,而真正用户的请求则正常从加速节点获取资源.加速节点的分

  • 基于HTTP浏览器缓存机制全面解析

    目录 什么是浏览器缓存 非HTTP协议定义的缓存机制 缓存流程图 HTTP缓存机制 服务端如何判断缓存已失效 Last-Modified/If-Modified-Since Etag/If-None-Match 为什么有了Last-Modified还要Etag? 200 OK(from cache)与304 Not Modified的区别 200 OK( from cache ) 出现操作: 304 Not Modified 出现操作: 缓存的不同来源 不能被缓存的请求 什么是浏览器缓存 Web

  • 解决Cent0S 6.7直接在/etc/resolv.conf文件下修改DNS地址重启不生效问题

    CentOS 6.7/Linux下设置IP地址 1:临时修改: 1.1:修改IP地址 # ifconfig eth0 192.168.2.104 1.2:修改网关地址 # route add default gw 192.168.2.1 dev eth0 1.3:修改DNS # echo "nameserver 192.168.2.1" >> /etc/resolv.conf         // 与主机的DNS服务器保持一致 这个时候就可以上网了,上网的IP地址为192.

  • Docker 默认bridge网络中配置DNS的方法

    本节描述如何在Docker默认网桥中配置容器DNS. 当您安装Docker时,就会自动创建一个名为bridge 的桥接网络. 注意 : Docker网络功能允许您创建除默认网桥之外的用户自定义网络. 有关用户自定义网络中DNS配置的更多信息,请参阅Docker嵌入式DNS部分. Docker如何为每个容器提供主机名和DNS配置,而无需在构建自定义Docker镜像时在内部写入主机名?它的诀窍是利用可以写入新信息的虚拟文件,在容器内覆盖三个关键的/etc 文件. 你可以通过在一个容器中运行mount

  • 详解用Nginx搭建CDN服务器方法(图文)

    利用Nginx的proxy_cache搭建缓存服务器一:编译ngx_cache_purge 1.Nginx的Proxy_cache是根据Key值md5哈希存储缓存,支持任意的Key,例如你可以根据"域名.URI.参数"组合成key,也支持非200状态码,如404/302等. 2.要利用Nginx的Proxy_cache,你需要在Nginx编译进ngx_cache_purge 模块,执行:nginx -V,查看有没有ngx_cache_purge 字样,没有的话需要自己手动编译. Ngi

  • 浏览器缓存知识小结及应用分析

    浏览器缓存,也就是客户端缓存,既是网页性能优化里面静态资源相关优化的一大利器,也是无数web开发人员在工作过程不可避免的一大问题,所以在产品开发的时候我们总是想办法避免缓存产生,而在产品发布之时又在想策略管理缓存提升网页的访问速度.了解浏览器的缓存命中原理,是开发web应用的基础,本文着眼于此,学习浏览器缓存的相关知识,总结缓存避免和缓存管理的方法,结合具体的场景说明缓存的相关问题.希望能对有需要的人有所帮助. 1. 浏览器缓存基本认识 它分为强缓存和协商缓存: 1)浏览器在加载资源时,先根据这

  • windows server 2008 r2 DNS服务器配置图文教程

    DNS服务器 DNS服务器用来负责将ip地址和域名进行互相解析. DNS服务器的作用 简单来说,DNS服务器的作用就是帮助用户使用简单好记的域名来访问网络上的主机和网络服务. DNS服务器中的记录类型 A地址:用于为特定域名制定对应的IP地址.CNAME: 用于为特定域名指定对应的的别名,用户可以通过别名访问这个域名,也可以为特定域名指定多个别名.MX:用于为特定域名指定负责接收电子邮件的邮件服务器的信息.NS:用于为当前DNS区域指定权威对的名称服务器. 1.安装DNS服务器 (1) 打开"添

  • 在Windows 7 上安装DNS服务器bind9方法详解

    本文主要介绍在WIN7上利用ntbind部署DNS服务器的方法.ntbind是Bind的Windows版本, 1.下载BIND9.11 下载地址:http://ftp.isc.org/isc/bind9/9.11.0rc3/. 我的系统是window 7 64位需要下载BIND9.11.0rc3.x64.zip,建议下载9.11以上的版本,老版本可能不支持Win7,下载时注意区分操作系统的位数. 2.安装BIND9.11 下载完成后,解压文件,点击BINDInstall.exe直接傻瓜式的安装

  • Windows Server2012 安装配置DNS服务器方法详解

    在云服务器 Windows Server2012 上安装配置DNS服务器方法,安装与配置非常简单,在这里写个完整教程方便大家查询 一.安装DNS服务器 1.打开服务器管理器,点击添加角色和功能 2.一直下一步,选择基于角色或基于功能的安装 3.选择目标服务器,只有一台 4.添加DNS服务器 5.一直下一步直到安装成功 二.配置DNS服务器 之前安装好了DNS服务器,但是还需要进一步的配置.这里,我要将百度的ip地址,解析到自定义的域名www.wcfwcf.com上 1.安装DNS服务器成功后可以

  • js清除浏览器缓存的几种方法

    关于浏览器缓存 浏览器缓存,有时候我们需要他,因为他可以提高网站性能和浏览器速度,提高网站性能.但是有时候我们又不得不清除缓存,因为缓存可能误事,出现一些错误的数据.像股票类网站实时更新等,这样的网站是不要缓存的,像有的网站很少更新,有缓存还是比较好的.今天主要介绍清除缓存的几种方法. 清理网站缓存的几种方法 meta方法 //不缓存 <META HTTP-EQUIV="pragma" CONTENT="no-cache"> <META HTTP-

  • 详解Linux搭建DNS服务器

    1.DNS服务器概念 在互联网上通信需要借助于IP地址,但人类对于数字的记忆能力远不如文字,那么将IP地址转换成容易记忆的文字是个好办法,可是计算机只能识别0.1代码,这时就需要一种机制来解决IP地址与主机名的转换问题,DNS全称为Domain Name System,即域名系统,其作用就是将我们经常使用的"网址"解析为IP地址 联机分布式数据库系统,DNS大多数名字在本地解析,仅少量需要在网上通讯,所以效率高 2.DNS相关概念 DNS利用树形目录结构,将主机名的管理分配给不同的层级

  • 清除浏览器缓存的几种方法总结(必看)

    关于浏览器缓存 浏览器缓存,有时候我们需要他,因为他可以提高网站性能和浏览器速度,提高网站性能.但是有时候我们又不得不清除缓存,因为缓存可能误事,出现一些错误的数据.像股票类网站实时更新等,这样的网站是不要缓存的,像有的网站很少更新,有缓存还是比较好的.今天主要介绍清除缓存的几种方法. 清理网站缓存的几种方法 meta方法 //不缓存 <META HTTP-EQUIV="pragma" CONTENT="no-cache"> <META HTTP-

随机推荐