当前位置: 首页 > news >正文

请求报文和响应报文(详细讲解)

在网络通信中,请求报文(客户端向服务器发送的请求)和响应报文(服务器向客户端返回的结果)是数据交互的核心载体。不同的协议(如 HTTP、FTP、SMTP 等)有不同的报文格式,其中HTTP 协议是最常用的,以下以 HTTP/1.1 为例,详细讲解请求报文和响应报文的格式及各部分含义。

🐳一、HTTP 请求报文格式

HTTP 请求报文由请求行(Request Line)请求头(Request Headers)空行请求体(Request Body) 四部分组成,格式如下:

请求行
请求头字段1: 值1
请求头字段2: 值2
...
空行(CRLF,即回车+换行)
请求体(可选)
🍉1. 请求行(Request Line)

请求行是请求报文的第一行,包含三个部分,用空格分隔:

  • 请求方法(Method):表示客户端希望服务器执行的操作(如 GET、POST 等)。
  • 请求 URI(Uniform Resource Identifier):指定要访问的资源路径(如/index.html)。
  • HTTP 版本:客户端使用的 HTTP 协议版本(如HTTP/1.1)。

示例
GET /api/user?id=123 HTTP/1.1
(含义:使用 GET 方法请求/api/user资源,携带参数id=123,协议版本为 HTTP/1.1)

常见请求方法

  • GET:获取资源(请求体通常为空,参数放在 URL 中)。
  • POST:提交数据(参数放在请求体中,适合传输大量或敏感数据)。
  • PUT:更新资源(整体替换)。
  • DELETE:删除资源。
  • HEAD:类似 GET,但只返回响应头(用于检查资源是否存在)。
🍉2. 请求头(Request Headers)

请求头是一系列键值对(格式:Key: Value),用于向服务器传递附加信息(如客户端类型、支持的数据格式等)。每个字段占一行,常见字段如下:

🍉3. 空行

请求头与请求体之间必须有一个空行(由CRLF\r\n组成),用于分隔头部和正文,服务器通过空行判断请求头结束。

🍉4. 请求体(Request Body)

请求体是可选的,仅在需要向服务器提交数据时存在(如 POST、PUT 方法)。其内容格式由Content-Type字段指定,常见格式:

  • application/x-www-form-urlencoded:表单数据(如username=test&password=123)。
  • multipart/form-data:用于上传文件(包含二进制数据)。
  • application/json:JSON 格式数据(如{"name":"test","age":20})。

x-www-form-urlencoded:用 @RequestParamHttpServletRequest.getParameter

application/json:用 @RequestBody 绑定对象(需加 @RestController)。

multipart/form-data:用 @RequestPartMultipartFile 接收文件。

示例(POST 请求体)
username=admin&password=123456(对应Content-Type: application/x-www-form-urlencoded

🐳二、HTTP 响应报文格式

响应报文由状态行(Status Line)响应头(Response Headers)空行响应体(Response Body) 四部分组成,格式如下:

状态行
响应头字段1: 值1
响应头字段2: 值2
...
空行(CRLF)
响应体(可选)
🍉1. 状态行(Status Line)

状态行是响应报文的第一行,包含三个部分,用空格分隔:

  • HTTP 版本:服务器使用的 HTTP 协议版本(如HTTP/1.1)。
  • 状态码(Status Code):三位数的数字,表示请求处理结果(如 200 表示成功)。
  • 状态描述(Reason Phrase):对状态码的文字解释(如OKNot Found)。

示例
HTTP/1.1 200 OK (含义:协议版本 HTTP/1.1,请求成功,状态描述为 OK)

常见状态码分类

  • 1xx(信息性):请求已接收,继续处理(如 100 Continue)。
  • 2xx(成功):请求被正常处理(如 200 OK、201 Created)。
  • 3xx(重定向):需要进一步操作才能完成请求(如 301 永久重定向、302 临时重定向)。
  • 4xx(客户端错误):请求有误,服务器无法处理(如 404 Not Found、403 Forbidden)。
  • 5xx(服务器错误):服务器处理请求时出错(如 500 Internal Server Error)。
🍉2. 响应头(Response Headers)

响应头是服务器向客户端传递的附加信息(如响应数据格式、缓存策略等),格式与请求头一致(Key: Value)。常见字段:

🍉3. 空行

与请求报文类似,响应头与响应体之间必须有一个空行,用于分隔头部和正文。

🍉4. 响应体(Response Body)

响应体是服务器返回的实际数据(如 HTML 页面、JSON 数据、图片等),其格式由Content-Type字段指定。

示例(JSON 响应体)
{"code": 200, "message": "success", "data": {"id": 1, "name": "test"}}

🐳三、完整示例对比

🍉1. 请求报文示例(POST 请求)
POST /api/login HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/116.0.0.0
Accept: application/json
Content-Type: application/x-www-form-urlencoded
Content-Length: 30
Cookie: sessionId=abc123username=admin&password=123456
🍉2. 响应报文示例(成功响应)
HTTP/1.1 200 OK
Server: Nginx/1.21.0
Date: Mon, 11 Aug 2025 08:00:00 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 78
Set-Cookie: token=xyz; Max-Age=3600{"code": 200, "message": "登录成功", "data": {"token": "xyz", "expire": 3600}}

完美撒花~

http://www.dtcms.com/a/326824.html

相关文章:

  • Wed前端第二次作业
  • C语言增删查改实战:高效管理顺序表
  • docker安装searxng
  • monorepo架构设计方案
  • CICD部署流程详解文档笔记
  • 在 Ubuntu 中docker容器化操作来使用新建的 glibc-2.32
  • [激光原理与应用-244]:设计 - 光学 - CLBO晶体使用一段时间后,输出功率就会下降,原因有哪些?
  • OpenBMC中的snk-psu-manager:架构、原理与应用深度解析
  • 高防IP能为网站防御哪些网络攻击?
  • 从零开始学JAVAWeb-5
  • 腾讯云Edgeone限时免费
  • for循环详解与实战技巧
  • Edit Distance
  • 传统制造业减人不减效:一线用工优化的3个投入方向,用对工具比盲目裁员更关键
  • 对抗样本攻击检测与防御
  • 车载软件架构 --- 车辆量产后怎么刷写Flash Bootloader
  • BLE ADV
  • special topic 9 (2) and 1011(1)division one
  • 深入解析Windows系统下UDP绑定失败的原理与系统级解决方案
  • 数据库三范式入门教程
  • Windows11 PowerShell CMD
  • Ascend DrivingSDK 中的 modulated_deform_conv2d(一)
  • GESP2023年9月认证C++一级( 第三部分编程题(1)买文具)
  • MATLAB实现遗传算法求解路网路由问题
  • PTE之路--03文
  • 【08-神经网络介绍】
  • 北京-4年功能测试2年空窗-报培训班学测开-第七十三天-投递简历-[特殊字符][特殊字符]
  • Linux驱动学习day27天(USB驱动理论部分)
  • SSR-code 项目复刻与3D模型生成实现
  • nomachine的安装和使用