1:HTTP概述
HTTP是客户端和服务端的规定,就是客户端发送的东西和浏览器回发的东西,两者都能看懂,规定的传输的内容
2:HTTP传输的过程
一、建立连接阶段
1:DNS解析
浏览器解析URL中的域名(如www.example.com
)
2:TCP三次握手
第一次握手:客户端发送SYN=1, seq=x
报文,请求建立连接。
第二次握手:服务器响应SYN=1, ACK=1, seq=y, ack=x+1
报文。
第三次握手:客户端确认ACK=1, ack=y+1
,双方进入ESTABLISHED
状态
作用:确保双工通信的可靠性,同步序列号并交换窗口大小
二、请求发送阶段
客户端构建HTTP请求报文并发送:
请求报文结构:
- 请求行:包含方法(GET/POST等)、URI(如
/index.html
)、HTTP版本(如HTTP/1.1) - 请求头:关键字段如:
Host
(目标域名)、User-Agent
(客户端信息)、Content-Type
(数据类型)、Content-Length
(数据长度)
- 空行:分隔头部与正文。
- 请求体:POST/PUT等方法携带的数据(如表单提交内容
name=John&age=30
)
- 请求行:包含方法(GET/POST等)、URI(如
传输过程:
- 报文通过已建立的TCP连接发送至服务器端口(默认80)
三、服务器处理阶段
接收与解析请求
- 服务器解析请求行和头部,确定资源路径、方法及参数。
- 根据
Content-Type
和Content-Length
处理请求体数据
执行业务逻辑
- 执行对应操作(如读取文件、查询数据库)
- 生成响应数据(如HTML页面、JSON结果)
- 执行对应操作(如读取文件、查询数据库)
四、响应返回阶段
服务器构建HTTP响应报文:
响应报文结构:
- 状态行:HTTP版本、状态码(如
200 OK
)、状态描述。- 状态码分类:
2xx
:成功(如200
请求成功,204
无内容)。3xx
:重定向(如301
永久重定向)。4xx
:客户端错误(如404
资源未找到)。5xx
:服务器错误(如500
内部错误)
- 状态码分类:
- 响应头:关键字段如:
Content-Type
(响应数据类型,如text/html
)、Content-Length
、Server
(服务器类型)
- 空行:分隔头部与正文。
- 响应体:返回的实际数据(如HTML代码、图片二进制流
- 状态行:HTTP版本、状态码(如
五、浏览器解析与渲染
解析HTML
- 浏览器解析响应体中的HTML,构建DOM树。
- 遇到静态资源(CSS/JS/图片)时,复用TCP连接发起新请求(HTTP/1.1默认
Connection: keep-alive
)
渲染页面
- 结合CSS生成渲染树,布局后绘制到屏幕。
- 执行JavaScript逻辑(可能阻塞渲染)
六、连接关闭
- TCP四次挥手(非持久连接时):
- 第一次挥手:客户端发送
FIN
报文,进入FIN_WAIT_1
状态。 - 第二次挥手:服务器确认
ACK
,进入CLOSE_WAIT
状态。 - 第三次挥手:服务器发送
FIN
报文,进入LAST_ACK
状态。 - 第四次挥手:客户端确认
ACK
后等待2MSL
(最大报文生存时间)后关闭
- 第一次挥手:客户端发送
3:请求协议(请求数据的格式)
4:响应协议(响应数据的格式)
5:HTTP协议的解析
我们用浏览器发送到服务器之后,服务器会进行代码处理,并返回
浏览器收到响应回来的数据之后会自动解析