一个完整的HTTP请求过程

本文详细阐述了HTTP请求从域名解析到与服务器建立连接的整个流程,包括TCP的三次握手和四次挥手过程,帮助读者理解网络通信的基础知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个完整的HTTP请求过程

一个完整的HTTP请求过程包含域名解析、TCP三次握手建立连接、HTTP请求与响应、TCP四次挥手关闭连接等关键步骤,具体如下:

1、域名解析

  1. 浏览器缓存检查:浏览器首先检查本地缓存中是否有对应域名的IP地址记录。
  2. 系统缓存与Hosts文件:若浏览器缓存无记录,则查询操作系统DNS缓存及Hosts文件(位于C:\Windows\System32\drivers\etc)。
  3. 本地DNS服务器查询:若Hosts文件无记录,则向本地DNS服务器发起请求。本地DNS服务器会先查询自身缓存,若无记录则向根DNS服务器发起迭代查询。
  4. 根DNS服务器与顶级域名服务器查询:根DNS服务器返回顶级域名服务器地址,本地DNS服务器再向顶级域名服务器查询,顶级域名服务器返回权威DNS服务器地址。
  5. 权威DNS服务器查询:本地DNS服务器向权威DNS服务器发起查询,权威DNS服务器返回对应的IP地址。
  6. 返回IP地址:本地DNS服务器将IP地址返回给客户端,并缓存该记录以备下次使用。

2、TCP三次握手建立连接

  1. 第一次握手(SYN):客户端向服务器发送SYN报文,包含客户端选择的初始序列号(ISN),客户端进入SYN_SENT状态。
  2. 第二次握手(SYN + ACK):服务器收到SYN报文后,返回SYN + ACK报文,包含服务器选择的初始序列号,并将客户端的ISN + 1作为ACK值,服务器进入SYN_RCVD状态。
  3. 第三次握手(ACK):客户端收到SYN + ACK报文后,发送ACK报文,将服务器的ISN + 1作为ACK值,客户端进入ESTABLISHED状态,服务器收到ACK报文后也进入ESTABLISHED状态,此时TCP连接建立成功。
    客户端 => 服务端 => 客户端

3、HTTP请求与响应

  1. 客户端发送HTTP请求:客户端通过已建立的TCP连接向服务器发送HTTP请求报文,包含请求行(请求方法、URL、协议版本)、请求头、空行和请求体(可选)。
  2. 服务器处理请求并返回响应:服务器收到请求后,处理请求并返回HTTP响应报文,包含状态行(协议版本、状态码、状态码描述)、响应头、空行和响应体。

4、TCP四次挥手关闭连接

  1. 第一次挥手(FIN):客户端发送FIN报文,表示客户端不再发送数据,但仍可接收数据,客户端进入FIN_WAIT1状态。
  2. 第二次挥手(ACK):服务器收到FIN报文后,发送ACK报文,确认收到客户端的关闭请求,服务器进入CLOSE_WAIT状态,客户端收到ACK报文后进入FIN_WAIT2状态。
  3. 第三次挥手(FIN):服务器处理完数据后,发送FIN报文,表示服务器不再发送数据,但仍可接收数据,服务器进入LAST_ACK状态。
  4. 第四次挥手(ACK):客户端收到FIN报文后,发送ACK报文,确认收到服务器的关闭请求,客户端进入TIME_WAIT状态,等待2MSL(最大报文段生存时间)后进入CLOSED状态,服务器收到ACK报文后立即进入CLOSED状态。

客户端 => 服务端 => 客户端
服务端 => 客户端 => 服务端

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值