关于HTTP状态码

本文将对http协议中的状态码进行总结。

整体分类

HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:
分类分类描述
1**信息,服务器收到请求,需要请求者继续执行操作
2**成功,操作被成功接收并处理
3**重定向,需要进一步的操作以完成请求
4**客户端错误,请求包含语法错误或无法完成请求
5**服务器错误,服务器在处理请求的过程中发生了错误

一个相对完整的概括:

当服务器响应时,其状态行的信息为HTTP的版本号,状态码,及解释状态码的简单说明。现将5类状态码详细列出:
① 客户方错误
100  继续
101  交换协议
② 成功
200  OK
201  已创建
202  接收
203  非认证信息
204  无内容
205  重置内容
206  部分内容
③ 重定向
300  多路选择
301  永久转移
302  暂时转移
303  参见其它
304  未修改(Not Modified)
305  使用代理
④ 客户方错误
400  错误请求(Bad Request)
401  未认证
402  需要付费
403  禁止(Forbidden)
404  未找到(Not Found)
405  方法不允许
406  不接受
407  需要代理认证
408  请求超时
409  冲突
410  失败
411  需要长度
412  条件失败
413  请求实体太大
414  请求URI太长
415  不支持媒体类型
⑤ 服务器错误
500  服务器内部错误
501  未实现(Not Implemented)
502  网关失败
504  网关超时
505 HTTP版本不支持

1**状态,部分请求

100, 客户端应当继续,并没有拒绝,客户端应当发送剩余部分
101, 理解了客户端请求,通过Upgrade通知客户端采用不同协议(只有有好处时才这样切换协议)
102, WebDav扩展,处理将被继续执行

2**状态,成功

200, 请求成功并将返回
201, 请求实现,并且建立资源
202, 请求接受,提前返回,并将异步处理不保证完全成功
203, 请求成功,并返回非原始信息,与200相对
204, 请求成功,只返回实体头部没有内容,并且客户端不更新视图(但是可能会使用返回信息中的最新变量等)
205, 请求成功,只返回实体头部没有内容,并且客户端更新视图(比如重置表单便于后续输入)
206, 部分GET请求,比如断点续传(Content-Range, Content-Length, multipart/byteranges多段下载的Content-Type,Date/ETag/Expire,Catch-Control,If-Range, Last-Modified等等)
207, WebDav扩展,之后将有XML消息并有独立的响应代码。

关于204的应用,来源:https://www.runoob.com/http/http-header-fields.html

响应头中的Refresh,表示浏览器应该在多少时间之后刷新文档,还可以通过setHeader("Refresh", "5; URL=http://host/path")让浏览器读取指定的页面。 也可通过设置HTML页面HEAD区的<META HTTP-EQUIV="Refresh" CONTENT="5;URL=http://host/path">实现,Refresh的意义是"N秒之后刷新本页面或访问指定页面",而不是"每隔N秒刷新本页面或访问指定页面"。因此,连续刷新要求每次都发送一个Refresh头,而发送204状态代码则可以阻止浏览器继续刷新,不管是使用Refresh头还是<META HTTP-EQUIV="Refresh" ...>。 
注意Refresh头不属于HTTP 1.1正式规范的一部分,而是一个扩展,但Netscape和IE都支持它。

3**状态,重定向

300, 会有一个可选列表让用户或浏览器自行选择其一进行重定向,非HEAD要有列表实体(Content-Type规定格式),响应Location指定首选URI,默认缓存响应。
301, 永久转移,后将用备选新URI(可能用新URI替换请求)。新永久URI响应Location指定,默认缓存。非HEAD给出实体URI链接和描述。非GET/HEAD不重定向。
注:某些HTTP/1.0浏览器POST得到301响应后,后续的重定向将变为GET方式。
302, 临时重定向,仍用原有地址,新URI响应Location指定,借助Cache-Control/Expire缓存响应,非HEAD给出实体URI链接和描述。非GET/HEAD不重定向。
注:很多现存浏览器将302视作303,并用GET访问Location的URI,而无视原先请求的方法。借助303/307用以明确服务端期待客户端进行何种反应。
303, 新URI在相应Location给出不替代原始URI,客户端应用GET方式从新URI访问,禁止缓存但是第二个请求可以被缓存。非HEAD给出实体URI链接和描述。
注:许多HTTP/1.1以前的浏览器不理解303,但是从浏览器互动角度302可以胜任,因为多数客户端实现302的响应就是要求客户端处理303的响应。
304,带有条件的GET请求,文档内容没变,没有消息体。响应头必须有:Date,ETag和/或Content-Location,Expires,Cache-Control和/或Vary
请求使用弱缓存验证(条件GET),响应无实体头避免与内容不一致,请求使用强缓存验证,则不应该包含实体头。
响应指明某实体未缓存则缓存系统忽视响应,并重新发送无限制条件请求;304响应要求更新某缓存条目则缓存系统更新。
305, 通过代理访问,Location指定代理URI,接收者重复发送单独请求,通过代理访问。只有原始服务器才能建立305响应。
注:305并未明确是为重定向单独请求,而是只被原始服务器建立。
306,废弃。
307, 临时重定向地址在响应Location中,继续以原址请求,只能借助Cache-Control/Expire才能缓存,非HEAD给出实体URI链接和描述。非GET/HEAD不重定向。

关于304的解释,来源:https://www.runoob.com/http/http-header-fields.html

响应头中的Last-Modified会用到,该头标识
文档的最后改动时间。客户可以通过If-Modified-Since请求头提供一个日期,该请求将被视为一个条件GET,只有改动时间迟于指定时间的文档才会返回,否则返回一个304(Not Modified)状态。Last-Modified也可用setDateHeader方法来设置。

关于302的解释,来源:https://www.runoob.com/http/http-header-fields.html

响应头中的Location,表示客户应当到哪里去提取文档。Location通常不是直接设置的,而是通过HttpServletResponse的sendRedirect方法,该方法同时设置状态代码为302。

4**状态客户端错误

400, 请求语义有误不应重复提交、参数有误。
401, 要求用户验证。响应包含WWW-Authenticate信息,请求包含相应的Authorization证书。401表示拒绝相应证书。
402, 预留。
403, 理解请求但拒绝执行。不能重复提交也与验证无关的拒绝。非HEAD服务器可在实体描述拒绝的原因;或404不让客户端获取任何信息。
404, 请求失败,被请求资源未找到。并不提示状况是否永久,若服务器知道情况应用410表明旧资源永久无用并无跳转,404广泛用于不想告知原因及无合适响应情形。
405, 不能使用请求行中方法请求资源。响应通过Allow来指明接收的方法列表。大多数网页服务器不支持PUT, DELETE等对服务器写操作的请求,响应此405错误。
406, 资源内容无法满足请求头条件,无法生成响应实体。非HEAD请求响应返回列表实体,让用户或浏览器选择合适的特性及地址,实体格式Content-Type定义。
407, 类似401响应, 需要在代理服务器上身份验证。代理服务器返回Proxy-Authenticate询问,请求返回Proxy-Authorization信息头以验证。
408, 请求超时。服务器等待时间内客户端未完成请求发送,可以随时重新请求。
409, 被请求资源冲突请求无法完成。用户能解决冲突且可重新提交时响应该代码,响应含帮助发现冲突源的信息。如通常PUT请求会有409错误,与之前的别人请求冲突可能给出差异。
410, 资源已永久性不可用,且不含转发地址。响应可缓存,如服务器无法确定是否永久,可以使用404。主要用于维护网站,如限时、增值服务及个人资源不可用等。
411, 在没有Content-Length头定义时,服务器拒绝请求。添加请求消息长度的Content-Length后,客户端可重新发请求。
412, 服务器验证没能满足条件。这允许客户端在请求头设置先决条件,避免请求方法用在希望之外的资源上。
413, 拒绝处理请求。请求的实体数据大小超过限制,服务器可关闭链接以免客户端继续发送。临时状况可发送一个Retry-After头指定可重新尝试的时间。
414, 因请求URI长度超出限制而拒绝。如POST变成GET而参数过长,重定向导致URI累加过长,安全漏洞攻击URI缓存溢出导致任意代码执行(无此漏洞的服务器返回414)
415, 请求方法提供的资源其实体并非服务器所支持的格式。
416, 请求头Range范围与实际不重合且无If-Range请求头。若Range是字节范围则表示超过资源长,服务器响应同时包含Content-Range实体头并被禁止multipart。
417, 请求头Expect内容无法被服务器满足,或者服务是代理可证明下一个路由节点Expect无法被满足。
421, 客户端IP到服务器连接数超过服务器允许范围。比如服务器看到的客户端地址是网关或代理服务器等,可能涉及不知一个终端用户。
422, 请求格式正确,但是语义错误,无法响应(RFC4918 WebDAV)
423,资源被锁定(RFC4918 WebDAV)
424, 由于之前某个请求错误导致当前请求错误(如PROPPATCH)(RFC4918 WebDAV)
425,在WebDav Advanced Collections 草案中定义,但是未出现在《WebDAV 顺序集协议》(RFC 3658)中。
426,客户端应当切换到TLS/1.0。(RFC 2817)
449,由微软扩展,代表请求应当在执行完适当的操作后进行重试。

关于401的应用,来源:https://www.runoob.com/http/http-header-fields.html

响应头中的WWW-Authenticate,客户应该在Authorization头中提供什么类型的授权信息?在包含401(Unauthorized)状态行的应答中这个头是必需的。
注意Servlet一般不进行这方面的处理,而是让Web服务器的专门机制来控制受密码保护页面的访问(例如.htaccess)。

5**状态服务端错误

500,服务器未知状况导致它无法处理(比如服务器代码问题)。
501,服务器不支持请求所需功能。无法识别请求方法,且无法支持其任何资源请求。
502,做为网关或代理收到上游无效响应。
503,临时服务器维护或过载,过段时间会恢复。响应中会有Retry-After表明预计的延迟,如果没有当作500处理。(其实不一定过载可能是服务器不希望拒绝客户端)
504,做为网关或代理,并未及时从上游(URI标识的,如HTTP,FTP,LDAP)或辅助服务器(如DNS)收到响应。某些服务器会在DNS查询超时返回(400或500)
505,服务不支持或拒绝支持请求中使用的Http版本。响应应包含为何不支持该版本以及服务器支持哪些协议的实体。
506,《透明内容协商协议》(RFC 2295)扩展,服务器内部配置错误:被请求协商变元资源被配置为在透明内容协商中用自己,因此在一协商处理中不是一合适的重点。
507,服务器无法存储完成请求所必须的内容。这个状况被认为是临时的。WebDAV (RFC 4918)
509,服务器达到带宽限制。这不是一个官方的状态码,但是仍被广泛使用。
510,获取资源所需要的策略并没有没满足。(RFC 2774)

参考

  • HTTP状态码: 菜鸟教程中的解释,通俗易懂,包括常用的、整体的(大类)、细节的(细节类别)状态码含义情况。细节的并不是很完整。
  • httpstatus.cn: 一个表格,便于查阅,信息解释比较详细,每个状态码都有额外链接。
  • HTTP状态码(响应码): 便于查询的表格,有列出支持的http版本,表格版本相对旧一些。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,829评论 1 331
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,603评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,846评论 0 226
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,600评论 0 191
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,780评论 3 272
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,695评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,136评论 2 293
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,862评论 0 182
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,453评论 0 229
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,942评论 2 233
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,347评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,790评论 2 236
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,293评论 3 221
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,839评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,448评论 0 181
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,564评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,623评论 2 249

推荐阅读更多精彩内容