网络状态码-经验笔记
网络状态码-经验笔记
引言
在网络通信中,HTTP(Hypertext Transfer Protocol)状态码是服务器向客户端(通常是Web浏览器)发送响应时所包含的重要信息之一。
这些状态码指示了客户端请求的结果。
了解并正确使用这些状态码对于构建健壮的Web应用和服务至关重要。
HTTP状态码分类
HTTP状态码分为五大类,每种类别代表了不同含义:
- 1xx Informational(信息性状态码)
- 2xx Successful(成功状态码)
- 3xx Redirection(重定向状态码)
- 4xx Client Error(客户端错误状态码)
- 5xx Server Error(服务器错误状态码)
1xx Informational
这类状态码用于传输过程中的临时响应,客户端应继续处理请求或等待进一步的信息。
- 100 Continue:指示客户端继续发送请求的剩余部分。
- 101 Switching Protocols:服务器正在切换协议,遵照Upgrade请求头字段的值。
2xx Successful
这类状态码表示请求已被成功接收、理解和接受。
- 200 OK:标准的响应成功状态码。
- 201 Created:请求成功且创建了一个新的资源。
- 202 Accepted:请求已接受待处理,但处理尚未完成。
- 204 No Content:请求已成功处理,但没有返回任何内容。
- 206 Partial Content:服务器已成功处理了部分GET请求。
3xx Redirection
这类状态码指示需要客户端采取进一步的动作才能完成请求。
- 300 Multiple Choices:请求的资源对应多个位置,客户端可以选择其中一个。
- 301 Moved Permanently:请求的资源已永久移动到新位置。
- 302 Found (Temporary Redirect):请求的资源临时位于不同的URI,未来请求应使用原来的URI。
- 303 See Other:客户端应通过GET方法重定向到另一个URI。
- 304 Not Modified:客户端已拥有资源的最新版本,无需再次下载。
- 307 Temporary Redirect:请求的资源临时位于不同的URI,但未来请求应使用原来的URI。
- 308 Permanent Redirect:请求的资源已永久移动到新位置,客户端应使用新的URI。
4xx Client Error
这类状态码表示客户端发送的请求有错误,服务器无法处理。
- 400 Bad Request:服务器无法理解请求的格式。
- 401 Unauthorized:请求需要用户身份验证。
- 403 Forbidden:服务器理解请求客户端的请求,但拒绝执行此请求。
- 404 Not Found:请求的资源不存在。
- 405 Method Not Allowed:请求的方法(如POST、GET等)不被允许用于请求的资源。
- 409 Conflict:请求与当前资源状态冲突。
- 415 Unsupported Media Type:服务器拒绝请求,因为请求实体的格式不受请求的目标资源支持。
- 429 Too Many Requests:用户已发出太多请求,在指定时间内不能再发请求。
5xx Server Error
这类状态码表示服务器在处理请求时出现了错误。
- 500 Internal Server Error:服务器遇到了一个未曾预料的情况,无法完成对请求的处理。
- 501 Not Implemented:服务器不支持请求的功能。
- 502 Bad Gateway:作为网关或代理工作的服务器从上游服务器收到了无效的响应。
- 503 Service Unavailable:服务器目前无法使用(可能是服务器过载或进行维护)。
- 504 Gateway Timeout:作为网关或代理工作的服务器从上游服务器等待响应的时间太长。
- 505 HTTP Version Not Supported:服务器不支持请求中使用的HTTP协议版本。
使用场景示例
- 创建资源:当客户端发送一个POST请求创建一个新资源时,如果创建成功,服务器应返回201 Created状态码,并在响应头中包含新资源的URI。
- 获取资源:如果客户端发送GET请求来获取一个存在的资源,服务器应该返回200 OK状态码和资源数据。
- 资源不存在:如果客户端尝试访问一个不存在的资源,服务器应该返回404 Not Found状态码。
- 资源更新:当客户端发送PUT或PATCH请求更新资源时,如果更新成功,服务器应该返回200 OK状态码。
- 资源删除:当客户端发送DELETE请求删除资源时,如果删除成功,服务器应该返回204 No Content状态码。
- 身份验证:如果客户端没有提供必要的身份验证信息,服务器应该返回401 Unauthorized状态码。
- 权限不足:如果客户端尝试访问受限资源但没有足够的权限,服务器应该返回403 Forbidden状态码。
- 服务器错误:如果服务器在处理请求时遇到问题,比如内部错误或数据库问题,应该返回500 Internal Server Error状态码。
实现细节
后端编程
在后端开发中,可以通过以下方式设置HTTP状态码:
-
Node.js (Express):
app.get('/example', function(req, res) {res.status(200).send('Resource found'); }); -
Python (Flask):
from flask import Flask, jsonify, make_responseapp = Flask(__name__)@app.route('/example') def example():response = make_response(jsonify({'message': 'Resource found'}), 200)return response -
Java (Spring Boot):
import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController;@RestController public class ExampleController {@GetMapping("/example")public ResponseEntity<String> example() {return new ResponseEntity<>("Resource found", HttpStatus.OK);} }
错误处理
为了确保能够有效地处理错误并返回适当的HTTP状态码,你可以在后端代码中实现错误处理机制。这通常涉及到使用异常处理来捕获错误,并根据错误类型设置不同的状态码。
例子:异常处理
from flask import Flask, jsonify, make_responseapp = Flask(__name__)@app.errorhandler(404)
def not_found(error):return make_response(jsonify({'error': 'Not found'}), 404)@app.errorhandler(Exception)
def handle_exception(e):code = 500if isinstance(e, ValueError):code = 400return make_response(jsonify({'error': str(e)}), code)
结论
正确使用HTTP状态码对于构建健壮的Web应用和服务至关重要。
通过在代码中显式地设置状态码,你可以覆盖服务器默认的行为,并提供更具体和有意义的反馈给客户端。
此外,良好的错误处理机制可以帮助提高应用程序的稳定性和用户体验。
相关文章:
网络状态码-经验笔记
网络状态码-经验笔记 引言 在网络通信中,HTTP(Hypertext Transfer Protocol)状态码是服务器向客户端(通常是Web浏览器)发送响应时所包含的重要信息之一。 这些状态码指示了客户端请求的结果。 了解并正确使用这些状态…...
c++ 实现 actor 框架
服务端:https://github.com/xukeawsl/coro_actor 客户端:https://github.com/xukeawsl/coro_actor_client...
应对猫咪掉毛挑战,希喂、小米热门宠物空气净化器实测功效PK
随着养宠人群的增多,铲屎官们的需求日益增长,市场上出现了很多品牌的宠物空气净化器。然而,产品质量参差不齐,给消费者选择带来不少困难。劣质宠物空气净化器不仅无法有效去除宠物毛发、皮屑、异味及空气中的有害微粒,…...
0002 保险会计及其特殊性
保险会计是将会计理论专门应用于保险公司的专业会计领域,它是会计学的一个重要分支。作为一个分支,保险会计具有独特的特性,这些特性主要表现在以下几个方面: 产品的无形性:保险产品本质上是一种无形的商品,…...
ChatTTS:终极文本转语音工具,支持API!
ChatTTS:终极文本转语音工具,支持API! 文本转语音(TTS)系统的发展已经取得了长足的进步。从最初的机械化、平坦的声音,到如今听起来令人惊讶的人声,ChatTTS作为这一领域的新成员,旨…...
VUE和Element Plus
1.VUE 1.下载和配置环境 使用vue编程,我们需要使用到的编程软件是vs code,还需要使用node.js,这个的作用就类似于JDK,当我们都下载好之后,winR键打开命令提示符,我们在这里可以查看版本, npm…...
Python学习笔记(五)
""" 演示tuple元组的定义和操作 """# 元组一旦定义完成,就不可修改 # 定义元组 # t1 (1, "Hello", True) # t2 () # 定义空元组 # t3 tuple() #定义空元组 # print(f"t1的类型是:{type(t1)}, 内容是&…...
Linux企业级应用(一)构建企业级Linux应用平台:全面指南
文章目录 构建企业级Linux应用平台:全面指南前言1. Linux企业级应用简介2. 构建企业级网站应用平台使用LNMP架构构建Web服务器部署MySQL数据库主从复制与读写分离 3. 实施虚拟化技术部署KVM虚拟化平台使用LVS和Keepalived实现负载均衡与高可用性 4. 文件系统与分布式…...
LeetCode112 路径总和
前言 题目: 112. 路径总和 文档: 代码随想录——路径总和 编程语言: C 解题状态: 成功解答! 思路 比较简单的一个思路是遍历所有的路径,求和后再查找目标值。但是,最好的方法是一边遍历&#x…...
TI AWR1843 毫米波雷达实物展示
引言 随着自动驾驶、工业自动化以及智能交通系统的快速发展,雷达传感器在现代科技中的重要性日益提升。毫米波雷达凭借其高精度测距、抗干扰能力强等特点,逐渐成为各类感知系统中的关键技术。德州仪器(TI)推出的 AWR1843 毫米波雷…...
前端JS总结(下)之事件操作
目录 前言 事件基础 事件的三部分: 常见的事件: 鼠标事件: 键盘事件: 表单事件: onfocus和onblur:获取焦点和失去焦点 onselect:选中单行文本框/多行文本框中的内容 onchangeÿ…...
如何妙用哈希表来优化遍历查找过程?刷题感悟总结,c++实现
先上题目 题目链接:题目链接 这题我最先想到的就是前缀和a,构造好了以后就遍历每一个[l,r]数组(满足题目要求的连续区间数组),奈何倒数第二个样例时间超限 先给出原思路代码 class Solution { public:int subarray…...
【设计模式】漫谈设计模式
这篇文章里说一下对设计模式的个人的理解。本篇文章更类似于随笔而非技术文档。 设计模式最早是在上个世纪就被人提出来了,如今被奉为圣经,也就是GOF等人写的《设计模式》,其中的设计模式,是指导开发者如何进行开发出高内聚、低耦…...
第N5周:Pytorch文本分类入门
本文为365天深度学习训练营 中的学习记录博客原作者:K同学啊 任务: ●1. 了解文本分类的基本流程 ●2. 学习常用数据清洗方法 ●3. 学习如何使用jieba实现英文分词 ●4. 学习如何构建文本向量 一、前期准备 环境安装 这是一个使用PyTorch实现的简单文…...
SpringBoot 自定义 starter
1. 官方文档 SpringBoot 版本 2.6.13,相关链接 Developing with Spring Boot 1.1 什么是 Starter Starters are a set of convenient dependency descriptors that you can include in your application. You get a one-stop shop for all the Spring and relate…...
TDengine Invalid data format 问题定位
Invalid data format 看语义是数据类型不符,通常这个报错出现在使用行协议写入时。 如果是批量数据写入,想定位是哪条语句的问题,需要查看客户端日志。 如何确定使用的是哪个日志 lsof -p pidof taosadapter | grep taoslog如果没有安装lso…...
Spring Boot 使用 MongoDB 教程
🍁 作者:知识浅谈,CSDN签约讲师,CSDN博客专家,华为云云享专家,阿里云专家博主 📌 擅长领域:全栈工程师、爬虫、ACM算法 🔥 微信:zsqtcyw 联系我领取学习资料 …...
Python办公自动化:使用openpyxl 创建与保存 Excel 工作簿
1 创建新的工作簿 在开始任何 Excel 操作之前,首先需要创建一个工作簿。openpyxl 提供了简单的接口来创建新的工作簿。 创建一个空白的工作簿 我们可以使用 openpyxl.Workbook() 来创建一个新的空白工作簿。以下是一个简单的示例: import openpyxl# …...
【张】#11 Union 共用体
Union 共用体可以存储不同的数据类型,但只能同时存储其中的一种类型。 #include <iostream> using namespace std;struct Product {char productName[20];int type;//1 int ,else charunion{int id_int;char id_chars[20];}; };int main(){Product product; …...
Xcode 在原生集成flutter项目
笔者公司有一个从2017年就开始开发的iOS和安卓原生项目,现在计划从外到内开始进行项目迁徙。 1》从gitee拉取flutter端的代码;(Android报错Exception: Podfile missing) 2》替换Xcode里的cocopods里Podfile的路径 然后报警 然后…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...
QT开发技术【ffmpeg + QAudioOutput】音乐播放器
一、 介绍 使用ffmpeg 4.2.2 在数字化浪潮席卷全球的当下,音视频内容犹如璀璨繁星,点亮了人们的生活与工作。从短视频平台上令人捧腹的搞笑视频,到在线课堂中知识渊博的专家授课,再到影视平台上扣人心弦的高清大片,音…...
ThreadLocal 源码
ThreadLocal 源码 此类提供线程局部变量。这些变量不同于它们的普通对应物,因为每个访问一个线程局部变量的线程(通过其 get 或 set 方法)都有自己独立初始化的变量副本。ThreadLocal 实例通常是类中的私有静态字段,这些类希望将…...
LUA+Reids实现库存秒杀预扣减 记录流水 以及自己的思考
目录 lua脚本 记录流水 记录流水的作用 流水什么时候删除 我们在做库存扣减的时候,显示基于Lua脚本和Redis实现的预扣减 这样可以在秒杀扣减的时候保证操作的原子性和高效性 lua脚本 // ... 已有代码 ...Overridepublic InventoryResponse decrease(Inventor…...
linux设备重启后时间与网络时间不同步怎么解决?
linux设备重启后时间与网络时间不同步怎么解决? 设备只要一重启,时间又错了/偏了,明明刚刚对时还是对的! 这在物联网、嵌入式开发环境特别常见,尤其是开发板、树莓派、rk3588 这类设备。 解决方法: 加硬件…...
