一张图搞清楚HTTP状态码

news2024/9/23 3:21:45

HTTP状态码的基本概念

在客户端和服务器连接交互的时候,一般是客户端先给服务器发送请求,然后服务器返回结果。客户端和服务器之间的交互非常频繁,涉及到很多种不同类型的操作,大多数的时候服务器能成功返回结果,有时候也会出错,有的时候还需要重定向,让客户端访问新的地址。

那么服务器是如何通知客户端,操作是成功还是失败?或者有其他的一些情况呢?

答案就是通过HTTP状态码。

HTTP状态码是作为服务器对客户端HTTP请求的响应。它们是一系列标准化的三位数字代码,用于告知客户端请求的处理情况。每个状态码的第一个数字标识了响应的类型。

状态码分类

  • 1xx(信息响应):表示服务器收到请求,需要请求者继续执行操作。
  • 2xx(成功):表示请求成功,请求被成功接收并处理。
  • 3xx(重定向):表示重定向,需要进一步的操作以完成请求。
  • 4xx(客户端错误):表示客户端错误,请求包含语法错误或无法完成请求。
  • 5xx(服务器错误):表示服务器错误,服务器在处理请求的过程中发生了错误。

HTTP状态码介绍

1xx(信息响应)

状态码英文名称描述
100Continue服务器已经接收到请求头,客户端应继续发送请求主体。
101Switching Protocols服务器即将切换的协议。

2xx(成功)

状态码英文名称描述
200OK请求成功,响应体随之返回了请求的资源。在浏览器请求网页或API请求数据时常见此状态码。简单来说,它告诉客户端:“你的请求已经成功处理,并且所请求的资源在消息体中。”
201Created该请求已成功,并因此创建了一个新的资源。这通常是在 POST 请求,或是某些 PUT 请求之后返回的响应。这个状态码的核心含义是:“你的请求已成功,并且因此创建了一个新的资源。”
202Accepted已经接受请求,但未处理完成。
203Non-Authoritative Information非授权信息,表示服务器已成功处理请求,但返回的信息可能来自其他地方,而非原始服务器。
204No Content无内容,服务器成功处理了请求,但不需要返回任何内容。
205Reset Content重置内容,请求已经成功处理,现在应该重置表单,以便用户可以继续输入新的信息 。
206Partial Content部分内容,服务器已经成功处理了部分GET请求。比如断点续传,在下载大文件时,如果下载过程中断,可以从上次中断的地方恢复下载,而不是重新开始。。

3xx(重定向)

状态码英文名称描述
300Multiple Choices多种选择,请求的资源包括多个可选项,客户端应该根据这些选项选择一个进行访问。
301Moved Permanently永久移动,表示所请求的资源已被永久移动到了新的位置,并且将来对此资源的引用应该使用返回的一个或多个URI。这是一种重定向状态码,用于告知客户端资源的新位置。
302Found临时移动,表示请求的资源临时移动到了一个不同的URI,与301不同的是,302表示这种重定向只是暂时的。
303See Other查看其它地址,将客户端重定向到不同的URI,这是对原始请求的响应,但响应本身位于另一个URI。这通常用于在POST请求之后进行,指示客户端向另一个URI发出GET请求以检索操作结果。
304Not Modified未修改,这意味着客户端缓存的版本仍然是最新的,因此不需要重新下载资源,所以客户端只需访问缓存获取数据就行了。
305Use Proxy使用代理,所请求的资源必须通过代理访问
306Unused已经被废弃的HTTP状态码
307Temporary Redirect临时重定向,307状态码与302 Found非常相似,都用于表示资源临时性的重定向到另一个URI。当收到307响应时,客户端应该对新的URI重新发起请求,但是与302不同的是,307保证请求方法和请求体不会改变(例如,POST请求不会变成GET)。这使得307更适合于需要保留请求方法的场景,例如表单提交。

4xx(客户端错误)

状态码英文名称描述
400Bad Request服务器无法理解客户端的请求,因为请求的语法错误或格式不正确。它通常发生在客户端发送了错误的请求数据或格式,如错误的请求行或头部,或无效的请求消息体。
401Unauthorized请求需要用户验证,如果之前已经发送过认证信息,那么401表示认证失败。它通常用于表示客户端尝试访问受保护的资源但没有提供正确的认证证书,如用户名和密码。
402Payment Required保留,将来使用。在未来,它可能会用于数字支付系统。
403Forbidden服务器理解了客户端的请求,但是拒绝执行。这通常是由于服务器上的访问控制规则造成的,比如客户端没有足够的权限访问特定的资源。
404Not Found服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面。
405Method Not Allowed客户端请求中的方法被禁止,这个状态码表示服务器已经识别了请求的方法(如GET、POST、PUT等),但该方法对于请求的资源是禁用的。例如,尝试用POST方法访问一个只允许GET请求的URL。
406Not Acceptable服务器无法生成客户端在请求的Accept头中指定的内容特性响应。例如,客户端请求JSON格式的数据,但服务器只能提供XML格式。
407Proxy Authentication Required请求要求代理的身份认证,类似于401,但是指出客户端必须先在代理服务器上进行认证。
408Request Time-out服务器等待客户端发送的请求时间过长,超时。
409Conflict表示请求与服务器当前状态冲突,例如多个同步更新之间的编辑冲突。
410Gone请求的资源已被永久删除,不再可用。与404不同,410指明这是一个已知的条件,资源以前是存在的。网站设计人员可通过301代码指定资源的新位置。
411Length Required服务器拒绝不含有效内容长度(Content-Length)头的请求。某些服务器配置要求必须知道请求的大小。
412Precondition Failed客户端在其请求中设置的前提条件失败。例如,客户端可能发送了“If-Match”请求头来基于特定版本的资源进行更新,但是资源的当前版本与客户端的不匹配。
413Request Entity Too Large由于请求的实体过大,服务器无法处理,超出了服务器愿意或能够处理的范围。
414Request-URI Too Large请求的URI过长(URI通常为网址),服务器无法处理。
415Unsupported Media Type请求附带的媒体格式,服务器无法处理。
416Requested range not satisfiable客户端在请求中指定的Range头无法满足,可能是请求的范围超出了目标URI的数据大小。
417Expectation Failed服务器无法满足Expect请求头中的期望。例如,当客户端在其HTTP请求头中设置了“Expect”头字段,它可能包含了一个特定的预期,例如“100-continue”,表示客户端希望在发送请求的主体之前得到服务器的确认。如果服务器无法满足这个预期,或者不理解请求头中的“Expect”字段,它会返回417 Expectation Failed状态码。

5xx(服务器错误)

状态码英文名称描述
500Internal Server Error服务器内部错误,无法完成请求。500错误是一个“服务器端”错误,意味着问题出在服务器上,而不是客户端请求有误。这可能是由于服务器程序错误、配置问题或资源不足导致。
501Not Implemented服务器不支持当前请求所需的功能。当服务器不识别请求方法,并且无法支持其对任何资源的处理时,就会返回这个状态码。比如,客户端发送了一个服务器不识别的自定义请求方法。
502Bad Gateway服务器作为网关或代理,从上游服务器收到无效响应。502错误表明你正在访问的服务器是一个网关或代理服务器,而它在处理请求时从上游服务器或辅助服务器接收到了无效的响应。
503Service Unavailable由于临时的服务器维护或者过载,服务器当前无法处理请求。这个状况是暂时的,并且将在一段时间以后恢复。如果能够预计延迟时间,那么响应中可以包含一个Retry-After头用以标明这个延迟时间。如果没有给出这个Retry-After信息,那么客户端应当以处理500响应的方式处理它。
504Gateway Time-out作为网关或代理的服务器未能在允许的时间内从上游服务器(或辅助服务器)接收请求。504错误与502错误相似,但区别在于502错误表明无效响应,而504错误是由于响应超时。
505HTTP Version not supported服务器不支持或拒绝支持在请求中使用的HTTP协议版本。

常见的HTTP状态码解析

200 OK

看到“200 OK”就表示请求成功了,并且服务器端的内容已经正常返回。

在这里插入图片描述

304 Not Modified

表示服务器上的资源未修改,这意味着客户端缓存的版本仍然是最新的,因此不需要重新下载资源,所以客户端只需访问缓存获取数据就行了。

在这里插入图片描述

400 Bad Request

服务器无法理解客户端的请求,因为请求的语法错误或格式不正确。它通常发生在客户端发送了错误的请求数据或格式,比如下图,在应该填写时间的地方填了一大串数字。
在这里插入图片描述
在这里插入图片描述

404 Not Found

服务器无法根据客户端的请求找到资源(网页),通常是客户端发送给服务器的URL写错了。

在这里插入图片描述
在这里插入图片描述
我们上网的时候输错网址,经常能看到“你访问的页面不存在”。

在这里插入图片描述

500 Internal Server Error

服务器内部错误,无法完成请求。500错误是一个“服务器端”错误,意味着问题出在服务器上,而不是客户端请求有误。这可能是由于服务器程序错误、配置问题或资源不足导致。

下图是因为用户输入的金额太大,超过数据库字段定义的长度,导致服务器上的程序出错了。

在这里插入图片描述
在这里插入图片描述

最后

HTTP 状态码能够非常清楚地描述服务器的当前状态,用来提示客户端下一步的操作。

除此之外,HTTP 状态码还有一个作用,就是能有效防止程序员同学们甩锅,当系统出现一个bug的时候,他们第一反应大概率是:这肯定不是我写的代码出问题了。

但是,如果服务器返回4xx错误,那大概率就是前端同学的锅,前端同学就要第一时间介入;如果服务器返回5xx错误,就可以理直气壮地找后端同学解决问题了。

好了,今天就先讲到这里,我们下次再见。

参考资料:
HTTP 响应状态码 - HTTP | MDN (mozilla.org)
HTTP状态码 - 维基百科,自由的百科全书 (wikipedia.org)
HTTP 状态码 | 菜鸟教程 (runoob.com)
rfc7231

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1421281.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue3使用setup-extend简化组件名写法

如果我们在Vue3中要使用setup的语法糖,就需要使用两个script标签,一个用于设置组件的name属性,一个用于编写setup中的代码。如下: 但是我们有觉得光是因为一个name属性就多写一个script标签有点麻烦了。 因此我们可以使用插件来进…

[每日一题] 01.30

文章目录 数列求和质数口袋奇怪数求和 数列求和 n int(input()) print(sum([i for i in range(1,n 1)]))质数口袋 n int(input()) i 2 sum 0 count 0 while n - i > sum:flag Truefor j in range(2,i): # 判断i是否为素数if i % j 0:flag Falsebreakif flag:sum i…

如何解决 DNS 解析错误(DNS_PROBE_FINISHED_NXDOMAIN)问题

如何解决 DNS 解析错误(DNS_PROBE_FINISHED_NXDOMAIN)问题 导语: 当你在访问网站时遇到 DNS 解析错误(DNS_PROBE_FINISHED_NXDOMAIN)时,可能是由于本地 DNS 缓存导致的问题。这里介绍一种简单且常见的解决…

MongoDB安装以及卸载

查询id: docker ps [rootlocalhost ~]# docker stop c7a8c4ac9346 c7a8c4ac9346 [rootlocalhost ~]# docker rm c7a8c4ac9346 c7a8c4ac9346 [rootlocalhost ~]# docker rmi mongo sudo docker pull mongo:4.4 sudo docker images 卸载旧的 sudo docker stop mong…

【Linux】vim的简单使用

我们知道在Windows下的VS2019是一个集成开发环境,也就是说,集编辑,编译,调试等功能都放在了一起;但是在Linux下,这些步骤都是分开的,我们这篇博客就来说一说vim这个编辑器,它只有编辑…

Focaler-IoU:更聚焦的IoU损失

摘要 边界框回归在目标检测领域中起着至关重要的作用,而目标检测的定位精度在很大程度上取决于边界框回归的损失函数。现有的研究通过利用边界框之间的几何关系来提高回归性能,而忽略了难易样本分布对边界框回归的影响。本文分析了难易样本分布对回归结…

Kotlin基础——高阶函数和内联函数

高阶函数 高阶函数以另一个函数作为参数或者返回值,其可用Lambda或函数引用表示 函数类型 下面将Lambda存储在sum变量中,其是函数类型 val sum { x: Int, y: Int -> x y }完整的函数类型为(para1,prar2…) -> returnValue val a: Int 0 va…

【MBtiles数据索引和服务发布】GeoServer改造Springboot番外系列二

xyz地图服务访问示例:http://192.168.1.240:8081/gmserver/raster/xyz/firstWP:Imagery-raster/{z}/{x}/{y}.jpg 访问示例如下: mbtiles目录结构 根据z,x,y获取对应mbtiles文件路径的工具方法 说明:重点是使用getMb…

堆宝塔

L2-1 堆宝塔 分数 25 作者 陈越 单位 浙江大学 堆宝塔游戏是让小朋友根据抓到的彩虹圈的直径大小,按照从大到小的顺序堆起宝塔。但彩虹圈不一定是按照直径的大小顺序抓到的。聪明…

第六讲_JavaScript原型

JavaScript原型 1. 原型的概念2. 原型继承2.1 原型链 3. class类的原型对象 1. 原型的概念 原型是 JavaScript 对象相互继承特性的机制。 每个函数都有一个 prototype 属性,这个属性指向一个对象,这个对象称为原型对象。每个对象都有一个 [[Prototype]…

在线mockjson

在线mockjson体验地址 在调一个问题的时候,但是问题的数据可能并不能随着想到的场景就变化,譬如说又个数组长度的情况,可能默认的情况下是返回4个元素,但是想要返回为空的时候,如果联系服务给改一下,那么流…

Pyecharts炫酷热力图:参数详解与实战大揭秘

Pyecharts绘制多种炫酷热力图参数说明代码实战 引言 热力图在数据可视化中是一种强大的工具,可以直观地展示数据的分布情况和变化趋势。Pyecharts是一个基于Echarts的Python可视化库,提供了丰富的图表类型,包括热力图。在本文中&#xff0c…

防御保护---防火墙的NAT-easyip

文章目录 目录 文章目录 点击此处查看NAT技术详解 一.NAT分类 二.防火墙配置 一对多NAT配置 多对多NAT配置 练习 点击此处查看NAT技术详解 一.NAT分类 源IP-NAT(源IP与公网之间转换):静态NAT,动态NAT,NAPT;使内网能够访问公网目…

Linux网络编程——网络初识

文章目录 1. 网络协议初识1.1 为什么要有网络协议1.2 协议分层 2. OSI七层模型3. TCP/IP五层(或四层)模型4. 网络传输基本流程5. 以太网通信 1. 网络协议初识 1.1 为什么要有网络协议 早期计算机是独立的,如果要进行数据交互,就…

安装好IntelliJ IDEA点击无反应,如何解决配置文件不一致导致的启动问题

在我们的开发生涯中,遇到IDE工具出现问题是在所难免的。最令人头疼的莫过于,你的IDEA(IntelliJ IDEA)无法启动,而且没有任何错误提示。这篇文章将详细讲解如何解决IntelliJ IDEA 2023.3.3版本启动失败的问题,这个问题可能也适用于…

【已解决】Centos安装不了podman问题(依赖无法安装)

今天安装podman一直安装不了,原因是containernetworking-plugins-1.1.1-1.el7.2.9.x86_64.rpm这个包因为网站的原因下载不了,不管是开启代理还是使用镜像源,都无法解决 最终是手动下载本地后上传至服务器解决,故把文件分享出来避…

【Web前端实操18】粘性定位——即固定顶层内容,可以继续滚动,但是顶层内容固定,不随着一起滚动

粘性定位 1、了解 可以被认为是相对定位和固定定位的混合。元素在跨越特定阈值前为相对定位,之后为固定定位。粘性定位是指网页或移动应用程序中的一种特性,即当用户滚动页面时,某个元素能够保持在屏幕上特定位置不动,直到用户滚动到达一定位置或进行特定操作。这个特性可…

【C++】C++入门—— 引用

引用 1 前情提要2 概念剖析3 引用特性4 常引用5 使用场景5.1做参数5.2 做返回值 6 传值 传引用的效率比较7 引用与指针的差异Thanks♪(・ω・)ノ谢谢阅读下一篇文章见 1 前情提要 在C语言中,我们往往会遇见复杂的指针(如…

tcpdump在手机上的使用

首先手机得root才可以,主要分析手机与手机的通信协议 我使用的是一加9pro, root方法参考一加全能盒子、一加全能工具箱官方网站——大侠阿木 (daxiaamu.com)https://optool.daxiaamu.com/index.php tcpdump,要安装在/data/local/tmp下要arm6…

vite+vue3+ts项目上线docker 配置反向代理API

这次重点的坑是反向代理。 1。项目中配置代理,为了跨域请求数据 项目根目录中新建vite.config.ts文件 在文件中添加配置代理 注意:其中 /api 和target 的地址后面没有 / 2。在项目根目录中新建Httprequest.ts文件,引入axios,并…