谈谈你对 dns-prefetch 的理解
DNS 预解析(DNS prefetching)是一种优化技术,用于加速网页加载过程中的域名解析步骤。它通过提前解析网页中的域名,将域名对应的 IP 地址缓存到本地,从而减少后续的 DNS 查询时间,提高网页的加载速度。
当浏览器遇到网页中的链接、资源引用或重定向时,需要进行域名解析以获取对应的 IP 地址。这个过程涉及向 DNS 服务器发送查询请求,等待 DNS 服务器响应并返回 IP 地址。这个过程可能会引入一定的延迟,影响网页的加载速度。
DNS 预解析通过在网页中插入<link>
标签来指示浏览器在加载网页时提前解析指定的域名。浏览器在解析 HTML 时遇到该标签会主动发起 DNS 查询,并将解析结果缓存起来。这样,在后续需要访问该域名的资源时,就无需再进行 DNS 查询,直接使用缓存的 IP 地址,从而减少了解析时间。
以下是一个示例的 DNS 预解析的<link>
标签:
<link rel="dns-prefetch" href="//example.com" />
在上述示例中,href
属性指定了需要进行 DNS 预解析的域名。浏览器在解析 HTML 时会注意到该标签,并在后台发起 DNS 查询,将解析结果缓存起来。
需要注意的是,DNS 预解析仅在现代浏览器中生效,对于不支持的浏览器,该标签将被忽略。另外,过度使用 DNS 预解析可能会增加网络负载和浏览器资源消耗,因此需要慎重使用。
DNS 预解析是一种简单而有效的优化技术,它可以减少域名解析的时间,从而提高网页的加载速度。通过在网页中添加<link>
标签,并指定需要预解析的域名,可以帮助浏览器提前获取域名对应的 IP 地址,优化用户的网页浏览体验。
DNS 是什么
全称 Domain Name System , 即域名系统。
万维网上作为域名和 IP 地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的 IP 数串。DNS 协议运行在 UDP 协议之上,使用端口号 53。
简单的说, 通过域名, 最终得到该域名对应的 IP 地址的过程叫做域名解析(或主机名解析)。
www.zuofc.com (域名) - DNS解析 -> 111.222.33.444 (IP地址)
有 dns 的地方, 就有缓存。浏览器、操作系统、Local DNS、根域名服务器,它们都会对 DNS 结果做一定程度的缓存。
DNS 查询过程如下:
- 首先搜索浏览器自身的 DNS 缓存, 如果存在,则域名解析到此完成。
- 如果浏览器自身的缓存里面没有找到对应的条目,那么会尝试读取操作系统的 hosts 文件看是否存在对应的映射关系, 如果存在,则域名解析到此完成。
- 如果本地 hosts 文件不存在映射关系,则查找本地 DNS 服务器 (ISP 服务器, 或者自己手动设置的 DNS 服务器), 如果存在, 域名到此解析完成。
- 如果本地 DNS 服务器还没找到的话, 它就会向根服务器发出请求, 进行递归查询。
DNS 协议?
概念:
DNS(Domain Namse System)
,域名系统,是进行域名和其相应 IP 地址进行转换的服务器。可以将DNS
理解为一个翻译官,负责把域名转换为相应的 IP 地址。DNS
协议运行在 UDP 协议之上,使用53
号端口。域名: 域名是一个具有层次的结构,如下:
bash 代码解读复制代码主机名.次级域名.顶级域名.根域名
# 即
host.sld.tld.root需要注意的是,根域名
.root
对于所有域名都是一样的,所以平时是省略的。根据域名的层级结构,管理不同层级域名的服务器,可以分为
根域名服务器
、顶级域名服务器
和权限域名服务器
。除此之外,还有电脑默认的本地域名服务器
。查询方式:
DNS
查询方式分为递归查询
和迭代查询
两种。所谓递归查询
,就是 A 向 B 请求,如果 B 不知道所请求的内容,则 B 将继续向上请求,直到获得所需的内容,然后将内容返回给 A。迭代查询
,就是 A 向 B 请求,如果 B 不知道,则 B 会告诉 A 如何获得该内容,让 A 继续去请求。域名缓存: 域名服务器会缓存域名和 IP 之间的映射。分为两种缓存方式: ①
浏览器缓存
:浏览器在获取网站域名的地址后会对其进行缓存,减少网络请求的损耗。 ②操作系统缓存
:操作系统的缓存其实是用户自己配置的 hosts 文件。完整解析过程:
首先搜索浏览器的 DNS 缓存,缓存中维护一张域名与 IP 地址的对应表
若没有命中,则继续搜索操作系统的 DNS 缓存
若仍然没有命中,则操作系统将域名发送至本地域名服务器,本地域名服务器查询自己的 DNS 缓存,查找成功则返回结果
若本地域名服务器的 DNS 缓存没有命中,则本地域名服务器向上级域名服务器进行查询,通过以下方式进行
迭代查询
:- 首先本地域名服务器向根域名服务器发起请求,根域名服务器返回顶级域名服务器的地址
- 本地域名服务器拿到这个顶级域名服务器的地址后,向其发起请求,获取权限域名服务器的地址
- 本地域名服务器根据权限域名服务器的地址向其发起请求,最终得到该域名对应的 IP 地址
本地域名服务器将得到的 IP 地址返回给操作系统,同时自己将 IP 地址缓存起来
操作系统将 IP 地址返回给浏览器,同时自己也将 IP 地址缓存起来
至此,浏览器就得到了域名对应的 IP 地址,并将 IP 地址缓存起来
参考链接:超详细 DNS 协议解析