余晖落尽暮晚霞,黄昏迟暮远山寻
本站
当前位置:网站首页 > 编程知识 > 正文

Http状态码整理(http状态码是什么)

xiyangw 2022-11-24 16:53 85 浏览 0 评论

基本介绍

状态码(Status Code)和原因短语(Reason Phrase)用于简单描述请求的结果。常见的比如:

  • 200 OK,表示请求成功;
  • 404 Not Found表示请求的资源未找到。

原因短语(上面的ok 和Not Found)是对状态码的解释说明。

形如200这样的状态码,这里的3位数字中第1位数字,通常表示响应的类别(会有一两个例外),大致可以分成以下几类(完整的状态码表,参见http1.1-RFC6):

状态码含义1xx请求正被处理2xx请求成功处理3xx请求需要附加操作,常见的例子如重定向4xx客户端出错导致请求无法被处理5xx服务端处理出错

(4,5常被用在排查bug时前后端互相甩锅-_-!)下面详细介绍常用的状态码和原因短语

分类

2xx

200 OK

表示请求已经被正常处理,这个比较常见,就不多说了。

204 NO Content

表示请求成功,但是响应的报文中不含实体主体。通常用于只需要客户端向服务端发送信息,而不需要接受新信息的情况使用

(这么官方且抽象的描述显然不是我的风格),举例:

现在很常见的一种请求类型option,通常被用来做正式请求的预请求,这个请求只需要确认后续的请求能不能通过,即只需要一个结果,而不需要返回其他内容,这类请求成功时就会返回204。

相信大家小时候都经常考试,如果拿试题来打个比方,那么:

  • 其他状态码可以比喻为填空题:客户端提问(发请求),服务端给出详细答案(返回实体内容)。
  • 204可以理解为判断题:客户端提问(发请求),服务端给出判断,对或者错(只要响应头有状态码,不需要实体内容)

206 Partial Content

字面意思:只返回了请求资源的部分。这种情况必须提到提到一个请求头Range——在http的请求中,这个头部用来表示范围请求,例如:

'Range':byte=5001-10000 // 表示本次要请求资源的5001-10000字节的部分

这种情况下,如果服务器接受范围请求并且成功处理,就会返回206,并且在响应的头部返回

'Content-Range':bytes 5001-10000/10000 // 表示整个资源有10000字节,本次返回的范围为 5001-10000字节

3xx

301 Moved Permanently

字面意思:资源被永久重定向了。这种情况下响应的头部字段Location中一般还会返回一个地址,用来表示要新地址。例如:

客户端发起一个请求,要访问a站点,此时收到的响应如下:

301 Moved Permanently 
...
Location:`b.com`
...
//上述内容表示:亲,您请求的资源已经永久转移啦,这边建议您去新的地址b.com访问呢,以后也请直接访问新地址哦

302 Found

字面意思:资源临时重定向了。和301的唯一区别就在于一个是临时,一个是永久:还是举上面的例子,响应如下:

302 Found
...
Location:`b.com`
...
//上述内容表示:亲,您请求的资源被临时转移啦,后面也有可能再次转移,所以这边建议您本次去新的地址b.com访问,以后的话还是先访问原来地址哦,有任何变化mm依然会热心为你解答

303 See Other

这个和302很像,但是有个细微区别是,除了会提示客户端去请求Location以外,还会要求请求要使用Location时使用GET方法。 在这补充一下一个历史背景:

请求返回301 302 303 时,几乎所有浏览器都会把原先的POST请求改为GET请求。虽然FRC1945和RFC2068规范中有规定:不允许客户端在重定向时修改方法。

简单的说,实际的浏览器在处理301和302时,默认就会把原先的POST请求改为GET请求,所以实际上使用303的意义,单纯只是让语义化更清晰点。(303表示服务器明确告诉客户端,你要使用GET方法访问location;如果是302,就是仅仅告诉客户端要访问location,不限制方法,但是实际上客户端自己也会用GET方法访问。)

304 Not Modified

字面意思是:资源未改变,可直接使用缓存。

这种响应一般是GET请求中带有附加条件,例如请求头中含有if-Match,if-Modified-Since等(if-Match表示只请求带有特殊标记的资源,if-Modified-Since表示请求指定时间后未变更的资源,因为本文主要讲解状态码,所以不在此引入太多http头部的相关内容,这里是为了简单解释下附加条件请求的含义)。

这种情况下,服务端不会返回响应主体,含义就是:”从你上次访问以来这个资源都没变过哟,直接使用你本地的缓存就行啦“。

304就是3xx里面的一个特例,因为它不算是一个重定向。(一般我们认为重定向要给出一个新的地址让客户端去访问,304如果一定要解释为重定向,只能解释为让客户端转去访问缓存-_-)

307 Temporary Redirect

这个重定向是为了解决前面刚刚介绍的一个历史背景问题:302时浏览器默认会转用GET方法去请求Location,而如果是307, 含义就是严格限制不允许从POST转为GET,这个目前我在实际工作中很少遇到。

4xx

4xx表示一般是客户端发生了错误。(这位前端同学,乖乖接了这个bug吧!)

400 Bad Request

(这个状态码相信大家一定很不陌生,特别是入门的新同学~)400的含义简单粗暴:“对不起,你的请求中有语法错误”,那具体是什么语法错误呢? 答案是 —— 不一定,一般来说响应报文里会有一些提示,例如:

  • “哎呀,你多加了什么请求头,我不能接受呀”
  • “哎呀,你地址不是不是写错了,这个uri不存在啊”
  • “哎呀,你是不是请求方法错了,这个uri之只能用put而不是post”
  • 下面请各位随意补充
  • ...

401 Unauthorized

字面意思:未经过认证。一般在后台系统之类的应用里,用户登录之后会获得一个身份认证信息,然后生成mac之类的信息,放在请求头的Authorization字段里,发送给服务端,如果这个认证信息有问题或者根本没发送,就会出现这个状态码。

403 Forbidden

这个就简单了:禁止访问也就是无权限访问。至于具体为什么禁止,服务器可以在响应内容的实体部分给出,当然也可以不给(没错,我服务端就是这么了不起,为所欲为!)

404 Not Found

很常见了,字面含义,服务端没有找到所请求的资源,经验表明,一般这个错误是客户端的请求url写错了。(别问我怎么知道的)

5xx

5xx表明服务端发生了错误。(真是个令人开心的消息,老板,你看不是我的问题!)

500 Internal Server Error

简单粗暴,服务器故障了。啥?你问我什么故障?我哪知道,我只会熟练地把bug转给隔壁的服务端同学。

评论区有读者提到漏掉了502和504,想想还是补上吧,虽然要说明这俩还得稍微解释下网关和代理(懒性暴露),但是平时开发的时候确实也经常出现,尤其是使用nginx进行调试的时候。顺便安利一下教程 windows下使用nginx调试

502 Bad Gateway

作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。这里说明下网关和代理服务器的概念:前面我们举例子都是直接客户端向服务器发请求,实际上客户端有时候不是直接向服务器请求,这中间可能存在网关和代理。

503 Service Unavailable

服务器暂时无法使用,可能是维护或者升级,反正无法使用。

504 Gateway Timeout

作为网关或者代理工作的服务器访问超时。

小结

本文对常见的一些http状态码和原因做了总结,一方面希望能够给更多入门的同学提供帮助,一方面也做一个归纳总结,方便平时排查bug时速查,文中有一部分可能涉及到了http头部的知识,虽然也想尽可能剥离开来,但是为了解释说明没法也确实完全分割开-_-。

相关推荐

高效删除文件名中的指定内容,祛除烦恼

如何快速批量删除文件名中的指定字符?在电脑整理文件时,我们常常需要进行批量重命名操作。如果文件名中含有不必要或重复的字符,这将影响文件的识别和查找。因此,删除这些文字或字符是非常必要且有效的。本文将分...

你的手机是不是经常提示存储空间不足?Python帮你清理重复文件

  最近我的手机经常提示存储空间不足,主要是微信和QQ群里接收的文件太多了,平时也没怎么整理。我把这些文件从手机里拷出来,打算整理一下,把该删的文件都删掉,把要备份的文件分门别类存到电脑或网盘上。我突...

从零开始打造云端AI管理调度平台(四)如何设计主页_1

最近闲来无事,想着把自己工作正在做的一个项目做一个简单的分享与实战教程,该项目不困难但是由于涉及要素过多所以比较复杂。所以这里分享出来也是为了帮助新手小白能在实战当中快速了解python知识。主要内容...

「万能Python」-17-标准库OS_python2.7标准库

Python的库是指预先编写好的代码集合,可以用来处理特定的任务或实现特定的功能。Python的标准库提供了许多常用的标准库,无需安装引入使用。Python3的标准库提供了许多常用的功能,包括...

十多行代码生成原帖和临写对照图_几十行代码可以申请软著吗

介绍这个小工具把原帖和临写分解成多列对照的形式。输入原帖图片,和输入临写图片,生成对照图片。使用说明运行compare.py文件,输入参数为:原帖图片文件名,临写图片文件名,列数。python3co...

Python合集之目录操作(四)_python之文件操作大全

1.删除目录删除目录可以通过os模块提供的rmdir()函数实现。通过rmdir()函数删除目录时,只有当要删除的目录为空时才起作用。os.rmdir(path)path为要删除的目录,可以使用绝对路...

excel办公自动化,自动合并excel表格

平时时收到不同人反馈的excel表格,需要将其合并在一个excel中,每个excel打开复制粘贴会很慢,如下脚本可一键合并所有的exceldefauto_merge():try:print('...

批量打开一个文件夹下面所有的excel表格

如果现在有一个文件夹,名称叫做“练习表格”,路径名是'C:\Users\123\Desktop\练习表格',现在的要求是打开这个文件下面所有的excel表格,后缀名字为“xlsx”,我...

500行代码,教你用python写个微信飞机大战

这几天在重温微信小游戏的飞机大战,玩着玩着就在思考人生了,这飞机大战怎么就可以做的那么好,操作简单,简单上手。帮助蹲厕族、YP族、饭圈女孩在无聊之余可以有一样东西让他们振作起来!让他们的左手/右手...

python 日志写入_python日志文件写入

1.第一步,新建日志文件路径,如下图:2.日志模块封装,代码如下:importlogging,oslogs_path=os.path.join(os.path.dirname(__file...

Python os.path模块使用指南:轻松处理文件路径

前言在Python编程中,文件和目录的操作是非常重要的一部分。为了方便用户进行文件和目录的操作,Python标准库提供了os模块。其中,os.path子模块提供了一些处理文件路径的函数和方法。本文主要...

Python中获取当前路径之pathilb和os的区别

20230114星期六:1,直接在py脚本中,执行,没有区别;2,打包成exe文件以后,在本机执行,有区别,这时,不能使用os.path.dirname(__file__),只能使用pathlib.P...

Python(办公自动化编程系列)学习笔记1

1、获得当前程序工作目录importos#os.getcwd()函数可以取得当前工作路径的字符串print(os.getcwd())运行结果2、获得程序文件夹相对路径#相对路径都用/表示#../...

文件路径名Pathnames的操作_路径和文件名是什么意思

1.现象问题使用路径名来获取文件名,目录名,绝对路径等等2.原因分析无3.问题解决使用os.path模块中的函数来操作路径名importos.path#查看标准化的绝对路径print...

关于《Python入门:os常用函数》中复制文件(夹)函数从简到繁

基本考虑练习os模块及file读写操作:将给定的源路径的文件(夹)复制到目标路径简单实现#文件到文件的复制path_src='E:\src.txt'path_tar='D...

取消回复欢迎 发表评论: