域名和DNS
域名
域名👉 www.baidu.com
域名的作用是帮助我们记忆网站地址,有了域名,就不用去记IP地址了。
域名的类型有以下几种:
- 根域名:
. - 顶级域名:
.cn .com .net .us .uk .org ... - 二级域名:
.com .gov .org .edu 自定义 baidu jd taobao ... - 三级域名:
自定义 www.baidu.com www.jd.com www.taobao.com - 四级域名:
自定义 www.pku.edu.cn mail.internal.jd.com
一般来说,购买二级域名后,三级、四级域名都是可以免费自定义的。
DNS
DNS的作用就将域名解析成IP地址。
域名解析过程如下:
- 查找本机hosts文件中是否有解析记录,如果有,直接使用
- 查找本地域名服务器中是否有解析记录,如果有,直接使用
- 查询根域名服务器,得到顶级域名服务器ip
- 查询顶级域名服务器中是否有解析记录,如果有,直接使用
- 根据顶级域名服务器反馈的ip,查询权限域名服务器,如果有解析记录,直接使用
- 如果以上都找不到,域名解析失败
为了使得解析速度更快、查询的节点更少,上述每个节点都可能设置高速缓存来加速解析。
DNS解析的优化
通过使用 dns-prefetch 在请求资源之前先解析资源的域名。
当我们在地址栏输入 url 的时候,浏览器会将域名经过 DNS 解析得到 ip 地址,这个解析过程是耗时的,但也是有缓存的,在第二次访问时,DNS 会直接从缓存中查找。
但如果浏览器在解析 dom 树的过程中,遇到一些跨域的资源,会阻塞解析,去请求跨域的资源,这个时候又要再次进行 DNS 解析,当不同的跨域资源越多时,首页白屏时间就越长,这种时候就需要将这些跨源的域名提前进行 DNS 解析。
dns-prefetch 可以帮助我们解决这个问题,在 link 标签中将 rel 属性设置为 dns-prefetch,href 设置为跨源的域名。
html
<link rel="dns-prefetch" href="https://fonts.googleapis.com/" />最佳实践
将 dns-prefetch 与 preconnect 提示配对。dns-prefetch 只执行 DNS 查询,而 preconnect 则是建立与服务器的连接。这个过程包括 DNS 解析,以及建立 TCP 连接,如果是 HTTPS 网站,就进一步执行 TLS 握手。将这两者结合起来,可以进一步减少跨源请求的感知延迟。你可以像这样安全地将它们结合起来使用:
html
<link rel="preconnect" href="https://fonts.googleapis.com/" crossorigin />
<link rel="dns-prefetch" href="https://fonts.googleapis.com/" />