一次完整的http请求过程

201 阅读2分钟

1、第一步域名解析

浏览器检查是否有缓存,会按照浏览器缓存——系统缓存——路由器缓存,如果有缓存,直接显示,如果没有则发送http请求。在发送请求前,需要域名解析(DNS解析),解析获取对应过的ip地址,dns查询步骤如下,其中一步成功则直接跳到建立连接部分: 浏览器搜索自身的dns缓存 搜索操作系统自身的dns缓存 读取本地的host文件 向域名服务器发送请求

2、建立TCP连接(TCP三次握手)

浏览器获取域名对应的ip地址后,建立tcp连接,tcp连接通过三次握手等方法保证传输的安全可靠: 发送方:SYN(synchronize),客户端发送SYN包(SYN=j)到服务器 接收方:SYN/ACK:在接收到客户端的syn包后,服务器也要发送一个SYN包给客户端,即SYN+ACK包,(确认信息传达) 发送方:ACK:客户端收到SYN+ACK包后,向服务器发送ACK包(确认接收方在线可收消息,握手结束) Accept:完成三次握手,客户端与服务器开始传送数

3、发送http请求

客户端向服务端发起http请求,客户端会发送请求头,请求内容,最后会发送一空白行,标示客户端请求完毕

4、服务器发送html响应

服务器做出应答,向客户端发送应答头信息,服务器向客户端发送请求头信息后,也会发送一空白行,标示应答头信息发送完毕,接着就以Content-type要求的数据格式发送数据给客户端。

5、Tcp连接的释放

数据传输完毕后,双方都可释放连接 客户端:FIN:客户端进程发出连接释放报文,并且停止发送数据; 服务器:ACK:服务器收到连接释放报文,发出确认报文; 服务器:FIN+ACK:将最后的数据发送完毕后,就向客户端发送连接释放报文 客户端:ACK:收到服务器的连接释放报文后,发出确认报文(服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接)