HTTP协议流程

简单描述HTTP协议流程,仅供自己学习,有时间会逐渐深入添加

解析地址

在浏览器中输入地址后,浏览器会先解析域名,拿到对应的IP

解析域名的过程:

1.从浏览器缓存中找

2.从系统缓存中找

3.从路由器缓存中找

4.ISP DNS缓存中找 

封装HTTP请求数据包

封装的HTTP请求数据包包括四个部分

*请求行

*请求头部

*空行

*请求数据

建立TCP连接(TCP的三次握手)


HTTP协议流程_第1张图片

1) Client首先发送一个连接试探,ACK=0 表示确认号无效,SYN = 1 表示这是一个连接请求或连接接受报文,同时表示这个数据报不能携带数据,seq = x 表示Client自己的初始序号(seq = 0 就代表这是第0号包),这时候Client进入syn_sent状态,表示客户端等待服务器的回复

2) Server监听到连接请求报文后,如同意建立连接,则向Client发送确认。TCP报文首部中的SYN 和 ACK都置1 ,ack = x + 1表示期望收到对方下一个报文段的第一个数据字节序号是x+1,同时表明x为止的所有数据都已正确收到(ack=1其实是ack=0+1,也就是期望客户端的第1个包),seq = y 表示Server 自己的初始序号(seq=0就代表这是服务器这边发出的第0号包)。这时服务器进入syn_rcvd,表示服务器已经收到Client的连接请求,等待client的确认。

3) Client收到确认后还需再次发送确认,同时携带要发送给Server的数据。ACK 置1 表示确认号ack= y + 1 有效(代表期望收到服务器的第1个包),Client自己的序号seq= x + 1(表示这就是我的第1个包,相对于第0个包来说的),一旦收到Client的确认之后,这个TCP连接就进入Established状态,就可以发起http请求了。

客户端发送请求命令

开始发送http请求

服务器响应

回应请求

返回数据

返回的数据包包括四个部分

*状态行

*响应头部

*空行

*响应数据

服务器关闭TCP连接

如果返回的Connection为keep-alive,则TCP请求将会保持一段时间,期间可继续请求,如果没有则直接断开请求

你可能感兴趣的:(HTTP协议流程)