当前位置: 首页 > 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.lryc.cn/news/617331.html

相关文章:

  • nomachine的安装和使用
  • 零基础学习jQuery第三天
  • 用 Python 绘制企业年度财务可视化报告 —— 从 Excel 到 9 种图表全覆盖
  • DDIA第五章:分布式数据复制中的一致性与冲突处理
  • 第5节 大模型分布式推理通信优化与硬件协同
  • 在Debian上安装MySQL
  • Excel 实战:基因表达矩阵前处理中测序符号的快速剥离方法
  • golang 基础案例_02
  • 设计模式笔记_结构型_享元模式
  • 深入解析Prompt缓存机制:原理、优化与最佳实践
  • Agent在供应链管理中的应用:库存优化与需求预测
  • Python FastAPI + React + Nginx 阿里云WINDOWS ECS部署实战:从标准流程到踩坑解决全记录
  • typecho博客设置浏览器标签页图标icon
  • 【工控】线扫相机小结 第六篇
  • uncalled4
  • 麒麟系统使用-PATH设置
  • 【接口自动化】-7- 热加载和日志封装
  • 实战:用 PyTorch 复现一个 3 层全连接网络,训练 MNIST,达到 95%+ 准确率
  • 软件测试关于搜索方面的测试用例
  • DeepCompare文件深度对比软件:权限管理与安全功能全面解析
  • Android Audio实战——获取活跃音频类型(十五)
  • 安全合规4--下一代防火墙组网
  • 企业内外网物理隔离时文件怎么传输更安全
  • ChatML vs Harmony:深度解析OpenAI全新对话结构格式的变化
  • Linux 流编辑器 sed 详解
  • C#使用EPPlus读写Excel
  • Elasticsearch Node.js 客户端的安装
  • 【Node.js从 0 到 1:入门实战与项目驱动】1.3 Node.js 的应用场景(附案例与代码实现)
  • Flutter Dialog、BottomSheet
  • RabbitMQ 消息转换器详解