HTTP协议流程

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

解析地址

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

解析域名的过程:

1.从浏览器缓存中找

2.从系统缓存中找

3.从路由器缓存中找

4.ISP DNS缓存中找 

封装HTTP请求数据包

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

*请求行<request-line>

*请求头部<headers>

*空行<blank-line>

*请求数据<request-body>

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


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请求

服务器响应

回应请求

返回数据

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

*状态行<status-line>

*响应头部<headers>

*空行<blank-line>

*响应数据<response-body>

服务器关闭TCP连接

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容