地址栏输入 URL 敲下回车后发生了什么?
- URL解析
- DNS 查询
- TCP 连接
- HTTP 请求
- 响应请求
- 页面渲染
URL解析
首先判断你输入的是一个合法的URL 还是一个搜索的关键词,然后对内容进行解析
- 协议:http 还是 https
- 域名:
- 端口号:默认是80,可以省略
- 路径:默认是 /,可以省略
- query:查询参数
- hash:锚点
DNS查询
DNS解析是将域名解析成IP地址,DNS解析的过程是一个递归查询的过程,从根域名服务器开始,依次查询,直到找到对应的IP地址
DNS缓存
- 浏览器缓存
- 系统缓存
- 路由器缓存
- ISP DNS 缓存
- 根域名服务器
DNS污染
DNS污染是指在DNS服务器上篡改DNS记录,使得用户访问的域名被解析到错误的IP地址上,从而无法访问到正确的网站
TCP连接
得到IP地址,浏览器会向这个IP地址放松一个TCP连接,这个过程叫做TCP三次握手。
- 客户端发送一个SYN包给服务器,告诉服务器我要建立连接了,你准备好接受了吗?
- 服务器收到SYN包后,回复一个SYN+ACK包,告诉客户端我准备好了,你可以发数据了
- 客户端收到SYN+ACK包后,再回复一个ACK包,告诉服务器我也准备好了,你可以发数据了
这样一个TCP连接就建立起来了,客户端和服务器就可以开始传输数据了。目的是为了在不可靠的网络环境中,保证数据的可靠传输。
HTTP请求
这个请求包括一个请求行(方法、路径、协议版本)、多个请求头(如 Host、Uer-Agent 等)和请求体(如 Post 请求)。
响应请求
响应包括一个响应行(协议版本、状态码、状态描述)、多个响应头(如 Content-Type、Content-Length 等)和响应体(如 HTML、图片等)。
页面渲染
浏览器首先会解析 HTML,创建 DOM 树。同时,它也会解析 CSS,创建 CSSOM 树。然后,它会将 DOM 树和 CSSOM 树合并成一个渲染树。在这个过程中,如果遇到 JavaScript,浏览器会停下来,执行 JavaScript,可能会修改 DOM 树和 CSSOM 树,然后继续渲染过程。最后,浏览器会根据渲染树来绘制页面。
四次挥手
当页面渲染完成后,浏览器会关闭 TCP 连接。这个过程通常被称为 "四次挥手":
- 客户端发送一个 FIN 包(结束)到服务器,请求关闭连接。
- 服务器接收到 FIN 包后,返回一个 ACK 包(确认)。这表示服务器已经准备好关闭连接了。
- 然后,服务器发送一个自己的 FIN 包到客户端。
- 最后,客户端返回一个 ACK 包,确认已经接收到服务器的 FIN 包。
这样,TCP 连接就被关闭了。这个过程的目的是为了确保双方都已经完成了数据传输,可以安全地关闭连接。