输入 url 地址 后
在浏览器输入 url
地址后,并按下回车键之后发生了什么?
浏览器会自动补全协议和端口
- 自动补全
HTTP
协议或者HTTPS
协议。 - 如果是
HTTP
协议自动补全80
端口 - 如果是
HTTPS
协议自动补全43
端口
浏览器自动完成 URL 编码
浏览器会对 URL
中的非字母数字字符转换为 百分号(%) 后跟两位十六进制数的过程。目的是确保 URL
在传输过程中不会因为特殊字符而造成解析错误。
例如:
- 空格被编码为
%20
&
被编码为%26
查找浏览器本地缓存
- 浏览器会根据
url
地址,查找本地缓存。 - 根据缓存规则查看是否命中缓,如果命中缓存则直接使用缓存,不再发出请求。
通过 DNS 查找域名的 IP 地址
建立 TCP 链接
- 浏览器向服务器发出
TCP
连接的申请 - 完整三次挥手后,连接通道建立。
是否使用 HTTPS 协议
- 如果使用了
HTTPS
协议,还会进行SSL
握手,建立加密通道 - 使用
SSL
握手的时候,会确认是否使用HTTP2
。
附带 cookie 到请求头
浏览器决定要附带哪些 cookie
到请求头
发出 GET 请求
浏览器自动设置好请求头
,协议版本
,cookie
,发出 GET 请求
服务器响应成功
- 服务器处理请求,进入后端处理流程。
- 完整处理后,服务器响应一个
HTTP
报文给浏览器。
根据服务器的响应内容处理
- 首先会根据使用得
HTTP协议版本
,以及Connection
字段的约定,决定是否要保留TCP连接
。 - 浏览器根据响应
状态码
决定如何处理这一次响应。 - 浏览器根据响应头中的
Content-Type
字段识别响应类型,如果是text/html
则对响应的内容进行HTML
解析,否则会做其他处理。
根据服务器的响应头内容处理
- 完成
浏览器缓存
和cookie
设置
解析 HTML
- 生成
DOM树
和CSSOM树
- 计算每个节点的位置和尺寸
(reflow)
,最后把每个节点利用GPU
渲染到页面上(repaint)