输入 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)