DNS 域名解析
你输入的网址并不是百度真实的地址,互联网中每一台机器都有唯一标识的 ip 地址。网址和 ip 地址的转换,就是 DNS 解析
- DNS 服务器:
- 根 DNS 服务器:返回顶级 DNS 服务器 ip 地址,比如(.com、.cn、.net....)
- 顶级 DNS 服务器:返回权威 DNS 服务器 ip 地址
- 权威 DNS 服务器:返回相应主机 ip 地址
- DNS 服务器查找过程:客户端->浏览器缓存->本地 hosts 文件->本地 DNS 解析器缓存->本地 DNS 服务器->客户端->.....
- 本地 DNS 服务器找到:在客户端浏览器输入 url 网址后,在递归查找找到 ip 地址,任何一个步骤找到都会结束查找过程
- 本地 DNS 服务器找不到:根据本地 DNS 服务器设置的转发器进行查询,迭代查找。
建立 TCP 连接
- 首先判断是否是 https,若协议是 https 则作加密处理:HTTPS=HTTP+SSL/TLS 加密+认证+完整性保护
-
三次握手建立 TCP 连接:ACK(此标志表示应答域有效)、SYN(在连接建立时用来同步序号)、FIN(用来释放一个连接)
- 第一次握手:就相当于客户端拿着 SYN=1,seq=x 去找服务端;
- 第二次握手:服务器收到后,就会拿着 SYN=1,ACK=1,seq=y,ack=x+1
- 第三次握手:客户端收到服务器传过来的暗号后,就会拿着 ACK=1,seq=x+1,ack=y+1
发送 HTTP 请求
- 请求的方式:get 或者 post
- get 和 post 区别:
- 语义:get 获取,post 传输。
- 安全:get 不安全,post 安全。
- 长度:get 限制长度(4k),post 理论上不限制的(2M)。
- 传输数据:get 通过地址栏,post 通过 send 和设置请求头。
- 缓存:get 有缓存,post 没有缓存
- get 和 post 区别:
- 请求头:报文头包含若干个属性,格式为“属性名:属性值”,服务端据此获取客户端的信息
- 请求体:传递的请求参数
服务器处理并返回 HTTP 报文
- HTTP 状态码
- 1xx:指示信息–表示请求已接收,继续处理。
- 2xx:成功–表示请求已被成功接收、理解、接受。
- 200:成功
- 3xx:重定向–要完成请求必须进行更进一步的操作。
- 301 被请求的资源已永久移动到新位置
- 304:没有修改,缓冲中取
- 4xx:客户端错误–请求有语法错误或请求无法实现。
- 403 服务器已经理解请求,但是拒绝执行它。
- 404 没有找到
- 5xx:服务器端错误–服务器未能实现合法的请求
- 响应头:多个属性组成
- 响应体:这个请求服务器返回回来的数据
浏览器解析渲染页面
- 浏览器解析 HTML,构建 DOM 树
- 浏览器解析 css,构建 CSS Rule Tree 规则树
- 解析完成后,浏览器引擎根据 DOM 树和 CSS 规则构造 Render Tree(不包括 Header、display:none)
- 根据 Render Tree 布局 layout:计算每个节点在屏幕上的位置
- 绘制页面
关闭 TCP 连接
-
四次挥手的整个过程
- 第一次挥手:客户端携带 FIN=1,seq=u 来找服务器;
- 第二次挥手:服务器带着 ACK=1,seq=v,ack=u+1 返回给客户端,
- 第三次挥手:服务器带着 FIN=1,seq=w,ack=u+1 返回给客户端,
- 第四次挥手:客户端携带 ACK=1,seq=u+1,ack=w+1 给服务器;
- TCP 连接和 TCP 断开次数不同的原因是:ACK、FIN 不会同时发送