每天一点小知识——一次完整的HTTP请求流程

185 阅读1分钟
sequenceDiagram
Client->>Service: SYN=1 ,seq=x ,client进入SYN_SEND状态
Service-)Client: (SYN=1 ,seq=y ),(ACK=1,ack=x+1),service进入SYN_RECV状态
Client->>Service: ACK=1,seq=x+1,ack=y+1,client和service进入ESTABLISHED状态
Client->>Service: client发送请求命令请求方法  + URI路径  + HTTP版本号,<br>例如:GET  /aaa/bbb.html  HTTP/1.1
Client->>Service: Client发送请求头+请求体(GET方法没有请求体)
Service-)Client: Service应答Responsse,版本号和协议状态码   HTTP/1.1  200 OK
Service-)Client: Service发送应答头信息(UA,Content-Type等等)
Service-)Client: Service以Content-Type约定的格式发送数据
Client->>Service: FIN=1,seq=x,   client进入FIN_WAIT_1状态
Service-)Client: ACK=1,ack=x+1,service进入CLOSE_WAIT状态,client收到后进入FIN_WAIT_2状态
Service-)Client: FIN=1,seq=y,service进入LAST_ACK状态
Client->>Service: ACK=1,ack=y+1,client进入TIME_WAIT,<br>service收到后进入CLOSED,关闭连接,<br>client等待某个时间后,没有收到service的应答,<br>认为service关闭了,进入CLOSED状态

上图是markdown生成的,可能有点难看,下面这个是画的,一样难看。。。 http请求.jpg