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

常见 HTTP 状态码分类和解释及服务端向前端返回响应时的最完整格式

目前开发的项目很大程度上是为明年的国产化做准备了,所以借这个机会把用了十年的自研系统全部重写,订立更严格的规范,本文记录一下返回格式及对应状态码。

在这里插入图片描述

常见 HTTP 状态码及解释

HTTP 状态码用于表示客户端请求的响应状态,它们分为五类:2xx 表示成功,3xx 表示重定向,4xx 表示客户端错误,5xx 表示服务器错误。以下是各类状态码的详细解释。

2xx 成功响应

状态码含义解释
200OK请求成功,服务器返回了请求的数据。GET 请求通常返回数据,PUT/POST 请求返回更新或创建的数据。
201Created请求成功创建了新资源,通常用于 POST 或 PUT 请求。响应头包含新资源的 URL。
202Accepted请求已接受,但尚未完成处理,通常用于异步任务。
204No Content请求成功,但服务器未返回内容,常用于删除操作或不需返回内容的操作。

3xx 重定向

状态码含义解释
301Moved Permanently资源的 URL 已永久更改,客户端应重定向到新的 URL,响应头包含 Location 字段。
302Found资源的 URL 暂时更改,客户端通常会重定向到响应头中的 Location 字段。
304Not Modified资源未更改,客户端可以使用缓存版本,通常用于浏览器缓存优化。

4xx 客户端错误

状态码含义解释
400Bad Request请求有误,服务器无法处理,通常由于无效的请求参数。错误详情通常在响应体的 errors 字段中返回。
401Unauthorized未经授权,通常是由于缺少或无效的身份认证(如 Token)。
403Forbidden已认证用户无权访问该资源,即使认证通过也无法访问。
404Not Found资源未找到,通常表示客户端请求的 URL 或资源不存在。
405Method Not Allowed请求方法不被允许,例如对只支持 GET 的资源使用了 POST。
422Unprocessable Entity请求格式正确,但语义错误,服务器无法处理。例如,提交了无效的数据格式。

5xx 服务器错误

状态码含义解释
500Internal Server Error服务器内部错误,可能是未知问题或代码异常导致无法完成请求。
502Bad Gateway作为网关或代理的服务器从上游服务器收到无效响应,通常表示服务器之间的通信问题。
503Service Unavailable服务器暂时无法处理请求,通常用于服务器维护或过载。
504Gateway Timeout作为网关或代理的服务器未能在规定时间内从上游服务器获得响应。

状态码使用建议

成功场景

  • 200 OK:用于数据获取(GET 请求)和数据更新(PUT 请求)的成功响应。
  • 201 Created:用于新资源创建成功,POST 或 PUT 请求中常见。
  • 204 No Content:用于不返回数据的请求,例如删除或不需返回内容的请求。

错误场景

  • 400 Bad Request:用于无效参数错误,并返回详细的 errors 信息。
  • 401 Unauthorized:用于身份认证失败。
  • 403 Forbidden:用于权限不足时的响应。
  • 404 Not Found:用于资源不存在的情况,客户端请求的 URL 错误时常见。
  • 422 Unprocessable Entity:用于语义错误或数据校验失败,并可返回具体错误信息。

系统级别问题

  • 500 Internal Server Error502 Bad Gateway503 Service Unavailable:用于服务器内部、网关或资源不可用等问题,通常表明可以稍后重试请求。

示例响应结构

设计响应结构时,可以包含 statuscodemessagedataerrors 等字段,以便前端能快速判断响应结果。

成功响应结构示例
{"status": "success","code": 200,"message": "获取用户信息成功","data": {"user": {"id": 1,"username": "user123","email": "user123@example.com","phone": "12345678901","role": "admin"},"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."},"errors": []
}
错误响应结构示例
{"status": "error","code": 400,"message": "请求参数错误","data": {},"errors": [{"field": "username","message": "用户名不能为空"},{"field": "password","message": "密码长度必须大于6个字符"}]
}
错误响应格式(带有数据)
  1. 部分成功的数据: 在一些批量操作(如文件上传或数据验证)中,前端可能希望了解哪些请求成功,哪些失败,以便更好地展示处理状态。
  2. 默认值提示: 当输入缺少时,data 可以返回可用的默认值或推荐值。

如果允许在错误情况下返回 data,建议在 errors 中提供尽可能详细的说明,以便前端清楚如何使用 data 中的内容。可以考虑以下格式:

{"code": 400,"message": "请求参数错误,部分数据不可用","data": {"user": {"username": "user123",     // 部分有效数据"email": "user123@example.com"},"defaults": {"role": "guest"             // 默认值或推荐值}},"errors": [{"field": "phone","message": "手机号格式不正确"},{"field": "password","message": "密码长度必须大于6个字符"}]
}

结构设计建议

  • dataerrors 可共存,允许在错误响应中返回部分有效数据及详细错误信息。
  • message 提供简短描述,便于用户理解。
  • code 以 HTTP 状态码的数字形式显示,便于客户端判断请求状态。
  • codestatus 可以考虑合并

这种设计能确保数据结构清晰,便于前后端调试与维护。

相关文章:

常见 HTTP 状态码分类和解释及服务端向前端返回响应时的最完整格式

目前开发的项目很大程度上是为明年的国产化做准备了,所以借这个机会把用了十年的自研系统全部重写,订立更严格的规范,本文记录一下返回格式及对应状态码。 常见 HTTP 状态码及解释 HTTP 状态码用于表示客户端请求的响应状态,它们…...

MySQL系列之如何在Linux只安装客户端

导览 前言Q:如何安装一个Linux环境下的MySQL客户端一、准备文件1. 确认Server版本2. 选择Client安装文件 二、下载并安装1. 下载1.1 寻找文件1.2 文件说明 2. 安装2.1 上传至Linux服务器2.2 执行安装 三、连接验证1. 确认远程授权2. 建立远程连接 结语精彩回放 前言…...

内核设备树,你真的了解吗?

在嵌入式系统和内核开发中,设备树(Device Tree, 简称 DT)扮演着至关重要的角色,帮助系统在启动时准确识别硬件配置并匹配合适的驱动程序。虽然设备树应用广泛,但其结构、工作机制及应用细节却不总是被深入理解。本文将…...

MySQL:客户端工具创建数据库

MySQL 是一个开源的关系型数据库管理系统(RDBMS),用于存储、管理和检索数据。MySQL是基于SQL语言的,它具有高效、可靠、易用的特点。 客户端工具 这个mysqld.exe就在计算机安装的数据可服务,启动之后,mys…...

Linux笔记之pandoc实现各种文档格式间的相互转换

Linux笔记之pandoc实现各种文档格式间的相互转换 code review! 文章目录 Linux笔记之pandoc实现各种文档格式间的相互转换1.安装 Pandoc2.Word转Markdown3.markdown转html4.Pandoc 支持的一些常见格式4.1.输入格式4.2.输出格式 1.安装 Pandoc sudo apt-get install pandoc # …...

【iOS】知乎日报第三周总结

【iOS】知乎日报第三周总结 文章目录 【iOS】知乎日报第三周总结前言评论区文字评论区的一个展开效果评论区数据的一个请求修改了主页获取数据的逻辑主页无限轮播图图片主色调的一个获取将一些拓展部分的内容写在分类里小结 前言 本周笔者因为金工实习整个项目进展比较慢&#…...

【p2p、分布式,区块链笔记 Torrent】WebTorrent的add和seed函数

在【p2p、分布式,区块链笔记 Torrent】WebTorrent的上传和下载界面的示例中,主要通过WebTorrent类的add和seed函数实现相关功能。这两个函数都返回一个Torrent类对象的实例。 seed函数 import createTorrent, { parseInput } from create-torrent // &…...

Redis穿透、击穿、雪崩

redis是一款常用的非关系型数据库,我们常用与作为数据缓存的组件。 接下来介绍一下面试中常被问到的三个概念以及简单的解决方法。 穿透 什么叫缓存穿透 缓冲穿透,是当有一个请求过来时,查询redis缓存不存在,又去查询数据库&…...

VBA高级应用30例应用3在Excel中的ListObject对象:插入行和列

《VBA高级应用30例》(版权10178985),是我推出的第十套教程,教程是专门针对高级学员在学习VBA过程中提高路途上的案例展开,这套教程案例与理论结合,紧贴“实战”,并做“战术总结”,以…...

2024系统架构师---上午综合题真题(重复考试知识难点)

1.感知层威胁 1)信息窃听:通过搭线或者电磁泄露造成数据隐私泄露;感知执行层主要由各种物理传感器组成,是整个物理信息系统中信息的来源。为了适应多变的环境,网络节点多布置在无人监管的环境中,因此容易被攻击者攻击,常见的针对感知执行层的攻击方式有; 2)感知破坏:…...

连接kafka消息队列报org.apache.kafka.clients.NetworkClient异常

启动kafka后,连接kafka消息队列报org.apache.kafka.clients.NetworkClient异常 could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient) 检查kafka运行日志,报The broker is trying to join the wrong clu…...

淘宝商品评论API:代码界的“买家秀”大揭秘

在淘宝这个神奇的购物天堂里,商品评论就像是隐藏的宝藏,等待着我们去挖掘。想象一下,如果你的代码能够自动获取这些评论,那岂不是像拥有了一台时光机,可以穿梭在买家的购物体验之中?今天,我们就…...

RabbitMQ队列详细属性(重要)

RabbitMQ队列详细属性 1、队列的属性介绍1.1、Type:队列类型1.2、Name:队列名称1.3、Durability:声明队列是否持久化1.4、Auto delete: 是否自动删除1.5、Exclusive:1.6、Arguments:队列的其他属性&#xf…...

游戏服务器和普通服务器的区别

服务器,顾名思义,是提供服务的设备,在计算机领域,服务器是指具有网络功能的高性能计算机,用于存储、处理和传输数据,而游戏服务器则是专门为游戏提供服务的服务器,它需要具备更高的性能、更稳定…...

Java 中的 Supplier:让数据生成更灵活

文章目录 1. Supplier 基础:无参返回,懒加载的利器2. 与 Optional 配合,优雅地处理默认值3. 惰性初始化缓存:提升性能4. 用于随机数、时间戳等动态数据的生成5. 结合 Stream 实现动态数据流6. 与工厂模式结合,动态创建…...

轻松理解操作系统 - Linux的数据块是如何储存数据的?

python入门 C入门 Linux 由于其开源、比较稳定等特点统治了服务端领域。 也因此,学习Linux 系统相关知识在后端开发等岗位中变得越来越重要,甚至可以说是必不可少的。 因为它的广泛应用,所以在程序员的日常工作和面试中,它都是经…...

青藤深度参编的终端安全国家标准正式发布

近日,国家市场监督管理总局、国家标准化管理委员会发布中华人民共和国国家标准公告,由TC260(全国网络安全标准化技术委员会)归口,公安部第三研究所牵头的GB/T 29240-2024《网络安全技术 终端计算机通用安全技术规范》&…...

软考:去中心化的部署有什么特点

微服务架构被认为是去中心化的,因为它具有以下特点 模块化:微服务架构将应用程序拆分为一系列小型服务,每个服务都是独立的模块,易于维护和扩展 。这种模块化设计使得每个服务可以独立于其他服务运行,没有单一的控制中…...

L8.【LeetCode笔记】回文数

1.题目 https://leetcode.cn/problems/palindrome-number/description/ 给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数 是指正序(从左向右)和倒序(从右向左&…...

双版本android studio安装

安装双版本原因:不同的AS存在不兼容的情况,导致旧版本的项目在新项目下要各种修改,很讨厌,使用双版本,各使用各的就没有这样的问题了。 建议:先安装低版本安装版,再安装高版本免安装版&#xf…...

微信小程序之bind和catch

这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...

测试markdown--肇兴

day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

Razor编程中@Html的方法使用大全

文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...