网络状态码-经验笔记
网络状态码-经验笔记
引言
在网络通信中,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的路径 然后报警 然后…...
XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...
Vue ③-生命周期 || 脚手架
生命周期 思考:什么时候可以发送初始化渲染请求?(越早越好) 什么时候可以开始操作dom?(至少dom得渲染出来) Vue生命周期: 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...
