Skip to main content

输入 url 地址 后

在浏览器输入 url 地址后,并按下回车键之后发生了什么?

浏览器会自动补全协议和端口

  • 自动补全HTTP协议或者HTTPS协议。
  • 如果是HTTP协议自动补全80端口
  • 如果是HTTPS协议自动补全43端口

浏览器自动完成 URL 编码

浏览器会对 URL 中的非字母数字字符转换为 百分号(%) 后跟两位十六进制数的过程。目的是确保 URL 在传输过程中不会因为特殊字符而造成解析错误。

例如:

  • 空格被编码为 %20
  • & 被编码为 %26

查找浏览器本地缓存

  • 浏览器会根据url地址,查找本地缓存。
  • 根据缓存规则查看是否命中缓,如果命中缓存则直接使用缓存,不再发出请求。

通过 DNS 查找域名的 IP 地址

建立 TCP 链接

  • 浏览器向服务器发出TCP连接的申请
  • 完整三次挥手后,连接通道建立。

是否使用 HTTPS 协议

  • 如果使用了 HTTPS 协议,还会进行SSL握手,建立加密通道
  • 使用SSL握手的时候,会确认是否使用HTTP2

浏览器决定要附带哪些 cookie 到请求头

发出 GET 请求

浏览器自动设置好请求头,协议版本,cookie,发出 GET 请求

服务器响应成功

  • 服务器处理请求,进入后端处理流程。
  • 完整处理后,服务器响应一个HTTP报文给浏览器。

根据服务器的响应内容处理

  • 首先会根据使用得HTTP协议版本,以及Connection字段的约定,决定是否要保留TCP连接
  • 浏览器根据响应状态码决定如何处理这一次响应。
  • 浏览器根据响应头中的Content-Type字段识别响应类型,如果是text/html则对响应的内容进行HTML解析,否则会做其他处理。

根据服务器的响应头内容处理

  • 完成浏览器缓存cookie 设置

解析 HTML

  • 生成 DOM树CSSOM树
  • 计算每个节点的位置和尺寸(reflow),最后把每个节点利用GPU渲染到页面上(repaint)