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

相关文章:

  • Android16新特性速记
  • 查看 php 可用版本
  • Spring Boot文件上传功能实现详解
  • DNS(域名系统)
  • cesium/resium 修改子模型材质
  • 第5节 大模型分布式推理通信优化与硬件协同
  • typecho博客设置浏览器标签页图标icon
  • 标准io(1)
  • MySQL中GROUP_CONCAT函数的使用详解
  • 机器翻译:一文掌握序列到序列(Seq2Seq)模型(包括手写Seq2Seq模型)
  • ssh 远程连接加密算法报错
  • MyBatis执行器与ORM特性深度解析
  • 十二、Linux Shell脚本:正则表达式
  • 导入CSV文件到MySQL
  • 打破内网枷锁!TRAE SOLO + cpolar 让AI开发告别“孤岛困境”
  • 腾讯 iOA 测评 | 横向移动检测、病毒查杀、外设管控、部署性能
  • 浏览器CEFSharp+X86+win7 之 测试抖音小店订单抓取(八)
  • 运动规划实战案例 | 基于多源流场(Flow Field)的路径规划(附ROS C++/Python实现)
  • Nmap 渗透测试弹药库:精准扫描与隐蔽渗透技术手册
  • Qt串口通信设计指南:通信层架构与实践
  • [go] 命令模式
  • 【软考架构】主流数据持久化技术框架
  • android 换肤框架详解1-换肤逻辑基本
  • 2025第十六届蓝桥杯大赛青少组省赛C++真题(初级组和中级组)
  • 数学建模——灰色预测(GM11)
  • 北京JAVA基础面试30天打卡07
  • HTTPS的应用层协议
  • react+vite-plugin-react-router-generator自动化生成路由
  • 安全等级认证系列 | 星环ArgoDB获CC EAL2安全认证,数据安全实力获国际认可
  • Linux入门DAY21