1. 响应码分类:1xx
响应码规范:RFC6585 (2012.4)、RFC7231 (2014.6)
1xx 类状态码属于提示信息,是协议处理中的一种中间状态(请求已接收到,需要进一步处理才能完成),实际用到的比较少,HTTP1.0 不支持
header 1 | header 2 | header 3 | header 4 |
---|---|---|---|
100 | Continue 继续 | 上传大文件前使用 | 由客户端发起请求中携带 Expect: 100-continue 头部触发请求者应当继续 提出请求。服务器返回此代码表示已收到请求的第一部分,正在等待其余部分 |
101 | Switch Protocols 切换协议 | 协议升级使用 | 由客户端发起请求中携带 Upgrade: 头部触发,如升级 websocket 或者 http/2.0 请求者已要求服务器切换协议,服务器已确认并准备切换 |
102 | Processing | WebDAV 请求可能包含许多涉及 文件操作的子请求,需要很长 时间才能完成请求。 | 该代码表示服务器已经收到并正在处理请求,但无响应可用。这样可以防止 客户端超时,并假设请求丢失 |
2 响应码分类: 2xx
2xx 类状态码表示服务器成功处理了客户端的请求
header 1 | header 2 | header 3 |
---|---|---|
200 | OK(成功) | 服务器已成功处理了请求。通常,这表示服务器提供了请求的网页。 如果是非 HEAD 请求,服务器返回的响应头都会有 body 数据。 表示 Googlebot 已成功检索到该文件 |
201 | Created(已创建) | 请求成功并且有新资源在服务器端被成功创建 (wireshark中过滤:http.response.code==201) |
202 | Accepted(已接受) | 服务器接收并开始处理请求,但请求尚未处理完成。这样一个模糊的概念是有意如此设计, 可以覆盖更多的场景。例如异步、需要长时间处理的任务 |
203 | Non-Authoritative Information 非授权信息 | 服务器已成功处理了请求,但返回的信息可能来自另一来源 当代理服务器修改了 origin server 的 原始响应包体时(例如更换了HTML中的元素值), 代理服务器可以修改 200为203的方式告知客户端这一事实, 方便客户端为这一行为作出相应的处理。 203响应可以被缓存 |
204 | No Content无内容 | 服务器成功处理了请求,但没有返回任何内容,即成功执行了请求且不携带响应包体, 并暗示客户端无需更新当前的页面视图,常见于我们用put、post等方法上传一些资源, 返回的响应不需要刷新当前的UI |
205 | Reset Content重置内容 | 服务器成功处理了请求,但没有返回任何内容。与 204 响应不同,此响应要求请求者重置 文档视图(例如,清除表单内容以输入新内容)成功执行了请求且不携带响应包体,同时指明客户端需要更新当前页面视图 |
206 | Partial Content部分内容 | 服务器成功处理了部分 GET 请求。是应用于 HTTP 分块下载或断点续传, 表示响应返回的 body 数据并不是资源的全部,而是其中的一部分, 使用 range 协议时返回部分响应内容时的响应码 |
207 | Multi-Status | RFC4918 ,在 WEBDAV 协议中以 XML 返回多个资源的状态。 (wireshark中过滤:http.response.code==207) |
208 | Already Reported | RFC5842 ,为避免相同集合下资源在207响应码下重复上报,使用 208 可以使用父集合的响应码 |
3 响应码分类: 3xx
3xx 类状态码表示客户端请求的资源发送了变动,需要客户端用新的 URL 新发送请求获取资源,也就是重定向。
3xx:重定向使用 Location 指向的资源或者缓存中的资源。在 RFC2068 中规定客户端重定向次数不应超过 5 次,以防止死循环。
要完成请求,需要进一步操作。通常,这些状态码用来重定向。
Google 建议您在每次请求中使用重定向不要超过 5 次。您可以使用网站管理员工具查看一下 Googlebot 在抓取重定向网页时是否遇到问题。诊断下的网络抓取页列出了由于重定向错误导致 Googlebot 无法抓取的网址。
header 1 | header 2 | header 3 |
---|---|---|
300 | Multiple Choices 多种选择 | 针对请求,服务器可执行多种操作。服务器可根据请求者 (user agent) 选择一项操作, 或提供操作列表供请求者选择。 资源有多种表述,通过 300 返回给客户端后由其自行选择访问哪一种表述。 由于缺乏明确的细节,300 很少使用 |
301 | Moved Permanently 永久移动 | 资源永久性的重定向到另一个 URI 中,在响应报文中使用首部“Location:URL”指定资源现在所在的位置 请求的网页已永久移动到新位置。服务器返回此响应(对 GET 或 HEAD 请求的响应)时, 会自动将请求者转到新位置。您应使用此代码告诉 Googlebot 某个网页或网站已永久移动到新位置。 |
302 | Found 临时移动 | 资源临时的重定向到另一个 URI 中,在响应报文中使用首部“Location:URL”指定临时资源位置 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置 来响应以后的请求。此代码与响应 GET 和 HEAD 请求的 301 代码类似,会自动将请求者 转到不同的位置,但您不应使用此代码来告诉 Googlebot 某个网页或网站已经移动, 因为 Googlebot 会继续抓取原有位置并编制索引。 |
303 | See Other 查看其它位置 | 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。对于除 HEAD 之外的所有请求,服务器会自动转到其他位置。重定向到其他资源,常 用于 POST/PUT 等方法的响应中 |
304 | Not Modified 资源未修改 | 资源未修改,当客户端拥有可能过期的缓存时,会携带缓存的标识 etag、时间等信息询问 服务器缓存是否仍可复用,而304是告诉客户端可以复用缓存 自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。 如果网页自请求者上次请求后再也没有更改过,您应将服务器配置为返回此响应 (称为 If-Modified-Since HTTP 标头)。服务器可以告诉 Googlebot 自从上次抓取后网页没有变更, 进而节省带宽和开销。 |
305 | 使用代理 | 被请求的资源必须通过指定的代理才能被访问请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理。 |
307 | Temporary Redirect 临时重定向 | 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来响应以后的请求。 此代码与响应 GET 和 HEAD 请求的 <a href=answer.py?answer=>301 代码类似, 会自动将请求者转到不同的位置,但您不应使用此代码来告诉 Googlebot 某个页面或网站已经移动,因为 Googlebot 会继续抓取原有位置并编制索引。 被请求的资源在临时从不同的URL响应请求,类似302,但明确重定向后请求方法必须与原请求方法相同,不得改变 |
308 | Permanent Redirect | 类似301,但明确重定向后请求方法必须与原请 求方法相同,不得改变 |
302 和 307 的区别:
302重定向请求方向一定是GET,与源请求无关;307使用源请求使用的method,而且会携带源请求的body作为重定向请求的包体。
301 和 302 都是重定向,到底该用哪个,这里需要注意一下 301 和 302 的区别
-
301,代表 永久重定向,也就是说第一次请求拿到长链接后,下次浏览器再去请求短链的话,不会向短网址服务器请求了,而是直接从浏览器的缓存里拿,这样在 server 层面就无法获取到短网址的点击数了,如果这个链接刚好是某个活动的链接,也就无法分析此活动的效果。所以我们一般不采用 301。
-
302,代表 临时重定向,也就是说每次去请求短链都会去请求短网址服务器(除非响应中用 Cache-Control 或 Expired 暗示浏览器缓存),这样就便于 server 统计点击数,所以虽然用 302 会给 server 增加一点压力,但在数据异常重要的今天,这点代码是值得的,所以推荐使用 302!
4 响应码分类: 4xx
4xx 类状态码表示客户端发送的报文有误,服务器无法处理,也就是错误码的含义。
header 1 | header 2 | header 3 |
---|---|---|
400 | Bad Request 错误请求 | 服务器不理解请求的语法服务器认为客户端出现了错误,但不能明确判断为以下哪种错误 时使用此错误码。是一个笼统的概念,例如HTTP请求格式错误 |
401 | Unauthorized 未授权 | 请求要求身份验证。对于登录后请求的网页,服务器可能返回此响应。用户认证信息缺失或 者不正确,导致服务器无法处理请求 |
402 | 需要付款 | 该状态码是为了将来可能的需求而预留的,用于一些数字货币或者是微支付 |
403 | Forbidden 禁止 | 服务器理解请求的含义,但没有权限(或拒绝)执行此请求,并不是客户端的请求出错 |
404 | Not Found 未找到 | 服务器没有找到对应的资源,请求失败,资源不存在服务器找不到请求的网页。 例如,对于服务器上不存在的网页经常会返回此代码。 |
405 | Method Not Allowed 方法禁用 | 禁用请求中指定的方法。服务器不支持请求行中的 method 方法curl www.sina.com.cn -X TRACE -I |
406 | Not Acceptable 不接收 | 请求的资源的内容特性无法满足请求头中的条件,因而无法生成响应实体对客户端指定 的资源表述不存在(例如对语言或者编码有要求),服务器返回表述列表供客户端选择 |
407 | Proxy Authentication Required 需要代理授权 | 此状态码与 <a href=answer.py?answer=35128>401(未授权)类似,但指定请求者 应当授权使用代理。如果服务器返回此响应,还表示请求者应当使用代理。对需要经由代理的请求, 认证信息未通过代理服务器的验证 |
408 | Request Timeout 请求超时 | 服务器接收请求时发生超时 |
409 | Conflict 冲突 | 资源冲突,例如上传文件时目标位置已经存在版本更新的资源 由于和被请求的资源的当前状态之间存在冲突,请求无法完成, 服务器必须在响应中包含有关冲突的信息。服务器在响应与前一个请求相冲突的 PUT 请求时可能会返回此代码,以及两个请求的差异列表 |
410 | Gone 以删除 | 被请求的资源在服务器上已经不再可用,而且没有任何已知的转发地址服务器没有找到对应的资源, 且明确的知道该位置永久性找不到该资源,是对404的强约束,很少使用如果请求的 资源已永久删除,服务器就会返回此响应。该代码与 404(未找到)代码类似, 但在资源以前存在而现在不存在的情况下,有时会用来替代 404 代码。如果资源已永久移动,您应使用 301 指定资源的新位置。 |
411 | Length Required 需要有效长度 | 如果请求含有包体且未携带 Content-Length 头部,且不属于 chunk类请求时,返回 411服务器不接受不含有效内容长度标头字段的请求。 |
412 | Precondition Failed 未满足前提条件 | 复用缓存时传递的 If-Unmodified-Since 或 If- None-Match 头部不被满足服务器未满足请求者在请求中设置的其中一个前提条件。 |
413 | Payload Too Large/Request Entity Too Large请求实体过大 | 服务器无法处理请求,因为请求的包体超出服务器能处理和允许的最大长度 |
414 | URI Too Long 请求的 URI 过长 | 请求的 URI 超出服务器能接受的最大长度 |
415 | Unsupported Media Type 不支持的媒体类型 | 上传的文件类型不被服务器支持请求的格式不受请求页面的支持。 |
416 | Range Not Satisfiable 请求范围不符合要求 | 如果页面无法提供请求的范围,则服务器会返回此状态码。无法提供 Range 请求中指定的那段包体 |
417 | Expectation Failed 期望失败,即未满足期望 | 服务器未满足”期望”请求标头字段的要求在请求头 Expect 中指定的预期内容无法被服务器满足时的响应码 |
418 | 我是一个茶壶 | 超文本咖啡罐控制协议,但是并没有被实际的HTTP服务器实现 |
421 | Misdirected Request | 服务器认为这个请求不该发给它,因为它没有能力处理 |
422 | 不可处理的实体 | 请求格式正确,但是由于含有语义错误,无法响应 |
426 | Upgrade Required | 服务器拒绝基于当前 HTTP 协议提供服务,通过 Upgrade 头部告知客户端必须升级协议才能继续处理 |
428 | Precondition Required | 用户请求中缺失了条件类头部,例如 If-Match |
429 | Too Many Requests | 客户端发送请求的速率过快 |
431 | Request Header Fields Too Large | 请求的 HEADER 头部大小超过限制 |
451 | Unavailable For Legal Reasons | RFC7725 ,由于法律原因资源不可访问 |
499 | 客户端读超时关闭连接的错误码 | 499是客户端读超时关连接造成的,加了proxy_ignore_client_abort on; 也不解决问题。 推荐从超时时间或者优化响应速度入手 499错误码,是Nginx发现客户端主动关闭连接后,记录到access日志中的。是不是 客户端接收响应超时了?你可以先在客户端统计下是不是这个原因,再调查为什么会导致超时 |
5 响应码分类: 5xx
5XX
这些状态码表示服务器在处理请求时发生内部错误,这些错误可能是由于服务器本身的错误,而不是请求出错,属于服务器端的错误码。
header 1 | header 2 | header 3 |
---|---|---|
500 | Internal Server Error 服务器内部错误 | 服务器遇到了一个未曾预料的状况(且不属于以下错误类型),导致了它无法完成对请求的处理,和400类似,是一个笼统的错误码 |
501 | Not Implemented 请求未完成 | 服务器不支持所请求的功能。例如,服务器无法识别请求方法时可能会返回此代码。 |
502 | Bad Gateway 错误网关 | 请求未完成,服务器从上游服务器收到一个无效的响应 表示代理服务器无法连接上游服务器或代理服务器 无法获取到合法响应,可能由于网络原因(iptables drop), ,上游服务关闭,并发连接数限制等 502.1 — CGI 应用程序超时 505.2 — CGI 应用程序出错 |
503 | Service Unavailable 服务不可用 | 服务器资源尚未准备好处理当前请求,很多种原因会导致503的出现,比如服务器端 做了请求限速或者对用户的IP做了并发连接的限制,当达到上限都会发送503, 或者由于临时超载、停机维护,服务器无法处理请求,比如:php服务停止,无法处理php程序 |
504 | Gateway Timeout 网关超时 | 服务器作为网关或代理,无法及时的从上游获得响应,即,请求成功,但是响应超时 |
505 | HTTP Version Not Supported HTTP 版本不受支持 | 服务器不支持请求中所用的 HTTP 协议版本。 |
507 | Insufficient Storage | 服务器没有足够的空间处理请求 |
508 | Loop Detected | 访问资源时检测到循环 |
511 | Network Authentication Required | 代理服务器发现客户端需要进行身份验证才能获得网络访问权限 |