从输入 URL 到页面加载的全过程
- 缓存解析
- DNS解析
- TCP连接
- 浏览器发送HTTP请求
- 服务器处理请求并返回HTTP报文
- 浏览器解析渲染页面
- TCP断开连接
具体过程
缓存解析
- 先去缓存里面找资源,如果缓存里面有资源直接在缓存里面拿就好
- 缓存资源寻找路线:浏览器缓存(离线缓存、内存缓存、硬盘缓存)-> 各种中间代理服务器的缓存(如:CDN缓存)
DNS解析
-
DNS(Domain Name System, 域名系统),是域名和IP地址相互映射的一个分布式数据库
-
DNS 解析就是从域名映射到IP地址的过程
-
如果有些网站已经访问过了,下次访问时浏览器会依次从浏览器缓存、系统缓存、路由器缓存、ISP缓存、根域名服务器、顶级域名服务器、主域名服务器里面找IP地址,所以下次访问速度更快
-
有些HTTP网页会自动做DNS预解析,就是提前解析之后可能会用到的域名,并将解析结果缓存到系统缓存中,缩短DNS解析时间,提高网站的访问速度(
<meta>
或<link>
标签进行控制) -
预解析分类
-
隐式 DNS 预解析:对页面中存在异域的链接或资源进行预加载
(1)HTTP 网页
会自动预解析<img>
(外域图片)、<script>
(外域JS代码)、<link>
(外域CSS代码、HTML代码)、<a>
(外域链接),如需关闭:<meta http-equiv="x-dns-prefetch-control" content="off">
(2)HTTPS 网页
不会自动预解析:处于安全考虑——防止窃听者根据 DNS 预解析推断显示在HTTPS页面中超链接的主机名,如需开启:<meta http-equiv="x-dns-prefetch-control" content="off">
显式 DNS 预解析:对页面中没有出现的域进行预加载,一般是在
<link>
标签的 rel 属性中进行设置,在文档顶部的<head>
标签中加入以下内容:<link rel="dns-prefetch" href="//img.alicdn.com">
-
-
预连接 rel="preconnect"
与 DNS 预解析类似,Preconnect 不仅完成 DNS 预解析,同时还将进行 TCP 握手和建立传输层协议
<link rel="preconnect" href="http://example.com">
-
预获取 rel="prefetch"
如果我们确定某个资源(图片/脚本文件/css文件)将来一定会被使用到,我们可以让浏览器预先请求该资源并放入浏览器缓存中。与 DNS 预解析不同,预获取真正请求并下载了资源,并储存在缓存中
<l