趣解HTTP状态码
前两天,在豆瓣上看到一个讲解HTTP状态码的文章,觉得很搞笑。虽说我也是搞IT的,也经常见到服务器返回的各种HTTP状态码,但是真没认真去了解过这个东东。借此机会,我也搜集了一下HTTP状态码的相关资料,和大家分享一下。
HTTP状态码(HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码。它由 RFC2616 规范定义的,并得到RFC2518、RFC2817、RFC2295、RFC2774、RFC2918等规范扩展。
HTTP状态码一共分为五类。状态码的第一个数字代表了响应的五种状态之一。分类如下:
分类 | 含义 |
---|---|
1XX | 表示消息。这一类型的状态码,代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束。 |
2XX | 表示成功。这一类型的状态码,代表请求已成功被服务器接收、理解、并接受。 |
3XX | 表示重定向。这类状态码代表需要客户端采取进一步的操作才能完成请求。通常,这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的Location域中指明。 |
4XX | 表示请求错误。这类的状态码代表了客户端看起来可能发生了错误,妨碍了服务器的处理。除非响应的是一个HEAD请求,否则服务器就应该返回一个解释当前错误状况的实体,以及这是临时的还是永久性的状况。这些状态码适用于任何请求方法。浏览器应当向用户显示任何包含在此类错误响应中的实体内容。 |
5XX | 表示服务器错误。这类状态码代表了服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器意识到以当前的软硬件资源无法完成对请求的处理。除非这是一个HEAD请求,否则服务器应当包含一个解释当前错误状态以及这个状况是临时的还是永久的解释信息实体。浏览器应当向用户展示任何在当前响应中被包含的实体。 |
下面,我们就开始趣解HTTP状态码。(少儿不宜,十八岁以下禁止观看啊。哈哈…)
状态码 | 英/中双解 | 汉语解释 | 趣解 |
---|---|---|---|
1XX—表示消息。这一类型的状态码,代表请求已被接受,需要继续处理。 | |||
100 | Continue/继续 | 客户端应当继续发送请求。 | 人家... 还要... |
101 | Switching Protocols/转换协议 | 服务器已经理解了客户端的请求,并将通过Upgrade消息头通知客户端采用不同的协议来完成这个请求。 | 服务姬傲娇中 |
102 | Processing | 由WebDAV(RFC 2518)扩展的状态码,代表处理将被继续执行。 | 造人中… |
2XX—表示成功。代表请求已成功被服务器接收、理解、并接受。 | |||
200 | OK/正常 | 请求已成功,请求所希望的响应头或数据体将随此响应返回。 | 欢迎回来, 主人 |
201 | Created/已创建 | 表示服务器在请求的响应中建立了新文档;应在定位头信息中给出它的URL。 | |
202 | Accepted/接受 | 服务器已接受请求,但尚未处理完。 | |
203 | Non-Authoritative Information/非官方信息 | 表示文档被正常的返回,但是由于正在使用的是文档副本所以某些响应头信息可能不正确。 | 俺是小三 |
204 | No Content/无内容 | 表示服务器成功处理了请求,但不需要返回任何实体内容,并且希望返回更新了的元信息。在并没有新文档的情况下,确保浏览器继续显示先前的文档。 | 小姐呢?!怎么没有? |
205 | Reset Content/重置内容 | 意思是虽然没有新文档但浏览器要重置文档显示。这个状态码用于强迫浏览器清除表单域。 | 先生,给你换个小姐? |
206 | Partial Content/局部内容 | 该请求必须包含Range头信息来指示客户端希望得到的内容范围,并且可能包含If-Range来作为请求条件。 | |
207 | Multi-Status/多种状态 | 由WebDAV(RFC 2518)扩展的状态码,代表之后的消息体将是一个XML消息,并且可能依照之前子请求数量的不同,包含一系列独立的响应代码。 | 搞个NP。嘿嘿… |
3xx—表示重定向。代表需要客户端采取进一步的操作才能完成请求。 | |||
300 | Multiple Choices/多重选择 | 表示被请求的文档可以在多个地方找到,并将在返回的文档中列出来。 | 先生,请点菜。 |
301 | Moved Permanently/永久迁移 | 指所请求的文档在别的地方;文档新的URL会在定位响应头信息中给出。浏览器会自动连接到新的URL。 | 人家搬家了 |
302 | Found/找到 | 与301有些类似,只是定位头信息中所给的URL应被理解为临时交换地址而不是永久的。 | 亲,先等下啦,人家先去洗白白嘛。。。 |
303 | See Other/参见其他信息 | 和 301、302 相似,只是如果最初的请求是 POST,那么新文档(在定位头信息中给出)药用 GET 找回。 | |
304 | Not Modified/没有修改 | 如果客户端发送了一个带条件的GET请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个状态码。304响应禁止包含消息体,因此始终以消息头后的第一个空行结尾。 | 好久不见,还是风味犹存啊。 |
305 | Use Proxy/使用代理 | 表示所请求的文档要通过定位头信息中的代理服务器获得。 | 泡妞是需要拉皮条的。 |
306 | Switch Proxy/切换代理 | 在最新版的规范中,306状态码已经不再被使用。 | 这店里的鸡太差了,换个。 |
307 | Temporary Redirect/临时重定向 | 在响应为303时按照GET和POST请求转向;而在307响应时则按照GET请求转向而不是POST请求。 | 不是这里, 换个地方啦 |
4xx—表示请求错误。代表客户端可能发生了错误,妨碍服务器的处理。 | |||
400 | Bad Request/错误请求 | 指出客户端请求中的语法错误。 | 不要把奇怪的东西给人家嘛 |
401 | Unauthorized/未授权 | 表示客户端在授权头信息中没有有效的身份信息时访问受到密码保护的页面。 | 对上对联,才让进洞房。 |
403 | Forbidden/禁止 | 表示除非拥有授权否则服务器拒绝提供所请求的资源。 | 这里不可以啦! |
404 | Not Found/未找到 | 告诉客户端所给的地址无法找到任何资源。 | 这里什么都没有 --- 人家是平的啦 |
405 | Method Not Allowed/方法未允许 | 表示请求方法(GET, POST, HEAD, PUT, DELETE, 等)对某些特定的资源不允许使用。 | 打开方式不对 |
406 | Not Acceptable/无法访问 | 表示请求资源的MIME类型与客户端中Accept头信息中指定的类型不一致。 | 啊啊啊,慢着!!好疼 |
407 | Proxy Authentication Required/代理服务器认证要求 | 该状态指出客户端必须通过代理服务器的认证。 | |
408 | Request Timeout/请求超时 | 指服务端等待客户端发送请求的时间过长。 | |
409 | Conflict/冲突 | 该状态通常与PUT请求一同使用,409 状态常被用于试图上传版本不正确的文件时。 | 找 小 姐找到了自己媳妇,然后… |
410 | Gone/已经不存在 | 告诉客户端所请求的文档已经不存在并且没有更新的地址。410状态不同于404,410是在指导文档已被移走的情况下使用,而404则用于未知原因的无法访问。 | 那个,你是个好人…… |
411 | Length Required/需要数据长度 | 表示服务器不能处理请求,除非客户端发送Content-Length头信息指出发送给服务器的数据的大小。 | 太长了…进不去 |
412 | Precondition Failed/先决条件错误 | 指出请求头信息中的某些先决条件是错误的。 | 先买房,然后才能结婚。 |
413 | Request Entity Too Large/请求实体过大 | 告诉客户端现在所请求的文档比服务器现在想要处理的要大。 | |
414 | Request URI Too Long/请求URI过长 | 用于在URI过长的情况时。这里所指的"URI"是指URL中主机、域名及端口号之后的内容。 | 这... 太长了啦 |
415 | Unsupported Media Type/不支持的媒体格式 | 意味着请求所带的附件的格式类型服务器不知道如何处理。 | 石女 |
416 | Requested Range Not Satisfiable/请求范围无法满足 | 表示客户端包含了一个服务器无法满足的Range头信息的请求。 | |
417 | Expectation Failed/期望失败 | 表示在请求头Expect中指定的预期内容无法被服务器满足。 | 没房,只能分手了。 |
418 | I'm a teapot/我是杯具 | 本操作码是在1998年作为IETF的传统愚人节笑话,并不需要在真实的HTTP服务器中定义。 | 我就是个杯具啊 |
421 | There are too many connections from your internet address/该IP发起的链接过多。 | 从当前客户端所在的IP地址到服务器的连接数超过了服务器许可的最大范围。 | |
422 | Unprocessable Entity/错误实体 | 请求格式正确,但是由于含有语义错误,无法响应。 | |
423 | Locked/锁定 | 当前资源被锁定。 | |
424 | Failed Dependency/错误关联 | 由于之前的某个请求发生的错误,导致当前请求失败。 | |
425 | Unordered Collection/乱序集合 | 在WebDav Advanced Collections草案中定义,但是未出现在《WebDAV顺序集协议》(RFC 3658)中。 | |
426 | Upgrade Required/升级要求 | 客户端应当切换到TLS/1.0。 | |
428 | Precondition Required/要求先决条件 | 先决条件是客户端发送 HTTP 请求时,如果想要请求能成功必须满足一些预设的条件。 | 主人~~不要这么快么~人家还没湿呢。 |
429 | Too Many Requests /太多请求 | 当你需要限制客户端请求某个服务数量时,该状态码就很有用,也就是请求速度限制。 | 主人~~我快要受不了了~ |
431 | Request Header Fields Too Large /请求头字段太大 | 某些情况下,客户端发送 HTTP 请求头会变得很大,那么服务器可发送 431状态码 来指明该问题。 | 主人~~这么大方不进去的~~ |
449 | Retry With/稍后重试 | 由微软扩展,代表请求应当在执行完适当的操作后进行重试。 | |
451 | Unavailable for Legal Reasons/正被审查 | 代表那些因为法律原因而倒下的网站。 | 不要啦我们还没领证呀 |
5XX—表示服务器错误。代表服务器在处理请求的过程中异常状态发生。 | |||
500 | Internal Server Error/内部服务器错误 | 服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。 | 糟了,身体变得有点奇怪了 |
501 | Not Implemented/未实现 | 服务器不支持当前请求所需要的某个功能。 | |
502 | Bad Gateway/错误的网关 | 作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。 | 进错了吗? |
503 | Service Unavailable/服务无法获得 | 表示服务器由于在维护或已经超载而无法响应。 | 不要...人家还没准备好啦 |
504 | Gateway Timeout/网关超时 | 指出接收服务器没有从远端服务器得到及时的响应。 | |
505 | HTTP Version Not Supported/不支持的 HTTP 版本 | 表示服务器并不支持在请求中所标明 HTTP 版本。 | 放开我,放开我,不要中出啊,会怀孕的(但其实是男生,不会怀孕) |
506 | Variant Also Negotiates | 代表服务器存在内部配置错误:被请求的协商变元资源被配置为在透明内容协商中使用自己,因此在一个协商处理中不是一个合适的重点。 | |
507 | Insufficient Storage | 服务器无法存储完成请求所必须的内容。 | 都流出来了… |
509 | Bandwidth Limit Exceeded | 服务器达到带宽限制。这不是一个官方的状态码,但是仍被广泛使用。 | 今天不接客了 |
510 | Not Extended | 获取资源所需要的策略并没有没满足。 | 没车没钱还想泡妞? |
511 | Network Authentication Required /要求网络认证 | 在你想使用web服务的时候需要重定向到认证页面,在走HTTP通信中都是这么做的, | 主人~~不要蒙住我的眼睛~会好兴奋的!~ |
注:
- RFC-Request For Comments是由Internet Society(ISOC)赞助发行,用于定义基本的互联网通信协议的一些列文件。文中所用的RFC文件地址如下:
- RFC2295:http://tools.ietf.org/html/rfc2295
- RFC2518:http://tools.ietf.org/html/rfc2518
- RFC2612:http://tools.ietf.org/html/rfc2612
- RFC2817:http://tools.ietf.org/html/rfc2817
- RFC2774:http://tools.ietf.org/html/rfc2774
- RFC2918:http://tools.ietf.org/html/rfc2918
- RFC6585:http://tools.ietf.org/html/rfc6585
- 表格中,斜体字的"中英双解"是我自己翻译的。如果不正确,请留指正。
- 428、429、431以及511是2012年4月发布的 RFC6585手册中新增的4个状态码。
- 451是XML标准发明人之一、Android开发人员Tim Bray提议设立一个新的HTTP错误代码。这个还没有成为正式标准。
参考资料
特别声明:
这是今天刚刚整理的文章。发表在博客园的同时,也发布到我的个人博客地瓜哥上。属于原创作品。有问题,请在此或在到我个人博客上留言交流。谢谢!
作者:D瓜哥
出处:http://www.diguage.com/
出处:http://www.cnblogs.com/diguage/
本文版权归作者所有;欢迎转载!请注明文章作者和原文连接。