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

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

时间:2024-11-06 23:16:45浏览次数:3  
标签:HTTP 请求 错误 响应 服务器 格式 message 服务端 客户端

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

在这里插入图片描述

常见 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": "[email protected]",
      "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": "[email protected]"
    },
    "defaults": {
      "role": "guest"             // 默认值或推荐值
    }
  },
  "errors": [
    {
      "field": "phone",
      "message": "手机号格式不正确"
    },
    {
      "field": "password",
      "message": "密码长度必须大于6个字符"
    }
  ]
}

结构设计建议

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

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

标签:HTTP,请求,错误,响应,服务器,格式,message,服务端,客户端
From: https://blog.csdn.net/snans/article/details/143559568

相关文章

  • **BMP(Bitmap)**是一种图像文件格式,通常用于存储位图图像。它是最早期的图像格式之一,最
    **BMP(Bitmap)**是一种图像文件格式,通常用于存储位图图像。它是最早期的图像格式之一,最早由微软在Windows操作系统中引入。BMP格式的文件扩展名通常为.bmp,它用于表示由像素网格组成的图像,像素数据存储在文件中,通常没有压缩,因此能够保存原始的图像数据。1. BMP图片格式是什么?......
  • python+flask计算机毕业设计个人旅游笔记服务端(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于旅游笔记的研究,现有研究主要以旅游目的地的推广、旅游攻略的撰写为主。专门针对个人旅游笔记,从其涵盖的多种系统功能角度进行深入......
  • DBeaver如何快速格式化sql语句,真简单!
    前言我之前在使用DBeaver的时候,一直不知道其可以格式化sql语句,导致sql语句看起来比较杂乱,今天就来介绍下DBeaver如何格式化sql语句。如何格式化sql语句首先,我们打开一个sql窗口,在里面输入我们要查询的sql语句,如图所示。可以看到,此时sql语句是比较杂乱的。然后,我们鼠标右击,选......
  • 2024/11/6日 日志 正则表达式,web与HTTP
    正则表达式点击查看代码--正则表达式--·概念:正则表达式定义了字符串组成的规则--·定义:--1.直接量:注意不要加引号--varreg=/^lw{6,12}$/:--2.创建RegExp对象--varreg=newRegExp("^lw{6,12}$");--·方法:--· test(str):判断指定字符串是否......
  • 如何使用YOLOv5来训练——建筑工地安全图像数据集,并附上详细的训练代码和步骤。这个数
    如何使用YOLOv5来训练——建筑工地安全图像数据集,并附上详细的训练代码和步骤。这个数据集包含10个类别,标注为YOLO格式。安全帽面罩安全锥等数据集进行检测建筑工地安全行为图像数据集yolo格式0:“安全帽”,1:“面罩”,2:“无安全帽”、3:“无面罩”、4:“无安全背心”、5:“......
  • 使用YOLOv5来训练——井盖状态检测数据集,并使用训练好的模型进行预测井盖状态检测数据
    井盖状态检测数据集yolo格式五种类别:broke(井盖破损),good(完好),circle(边圈破损),lose(井盖丢失),uncovered(井盖位移/未覆盖全)训练数据已划分,配置文件稍做路径改动即可训练。训练集:1217验证集:108 使用YOLOv5来训练一个包含1217张训练图像和108张验证图像的井盖状态检......
  • c# HttpClient,WebClient常用请求
     getWebClientwebClient=newWebClient();ServicePointManager.SecurityProtocol=(SecurityProtocolType)192|(SecurityProtocolType)768|(SecurityProtocolType)3072;//ServicePointManager.Expect100Continue=true;......
  • 合宙低功耗4G模组HTTP网络协议应用
    ​ 一、HTTP概述1.1简介HTTP是HyperTextTransferProtocol(超文本传输协议)的缩写。HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的......
  • 【docker】拉取镜像环境报错解决#ERROR: Get https://registry-1.docker.io/v2/
    系统环境是ubuntu24.04创建daemon.json文件,设置国内加速地址。之前尝试使用了阿里,网易,百度的都不行。最后网上随便找了一粘进去,{"registry-mirrors":["https://docker.registry.cyou","https://docker-cf.registry.cyou","https://dockercf.jsdelivr.fyi","https://do......
  • dxf格式文件转dwg格式文件
    1创建dxf,可以使用netdxf创建dxf文件https://github.com/haplokuon/netDxf官网例子如下:publicstaticvoidMain(){ //yourDXFfilename stringfile="sample.dxf"; //createanewdocument,bydefaultitwillcreateanAutoCad2000DXFversion DxfDocument......