原文连接
HTTP状态码表示客户端HTTP请求的返回结果、标记服务器端的处理是否正常或者是出现的错误,能够根据返回的状态码判断请求是否得到正确的处理很重要。
状态码由3位数字和原因短语组成,数字中的第一位指定了响应类别,后两位无分类
状态码分类表:
类别 | 原因短语 | |
---|---|---|
1xx | Informational(信息性状态码) | 接受的请求正在处理 |
2xx | Success(成功状态码) | 请求正常处理完毕 |
3xx | Redirection(重定向) | 需要进行附加操作以完成请求 |
4xx | Client error(客户端错误) | 客户端请求出错,服务器无法处理请求 |
5xx | Server Error(服务器错误) | 服务器处理请求出错 |
各类别常见状态码:
2xx (3种)
200 OK:表示从客户端发送给服务器的请求被正常处理并返回;
204 No Content:表示客户端发送给客户端的请求得到了成功处理,但在返回的响应报文中不含实体的主体部分(没有资源可以返回);
206 Patial Content:表示客户端进行了范围请求,并且服务器成功执行了这部分的GET请求,响应报文中包含由Content-Range指定范围的实体内容。
3xx (5种)
301 Moved Permanently:永久性重定向,表示请求的资源被分配了新的URL,之后应使用更改的URL;
302 Found:临时性重定向,表示请求的资源被分配了新的URL,希望本次访问使用新的URL;
301与302的区别:前者是永久移动,后者是临时移动(之后可能还会更改URL)
303 See Other:表示请求的资源被分配了新的URL,应使用GET方法定向获取请求的资源;
302与303的区别:后者明确表示客户端应当采用GET方式获取资源
304 Not Modified:表示客户端发送附带条件(是指采用GET方法的请求报文中包含if-Match、If-Modified-Since、If-None-Match、If-Range、If-Unmodified-Since中任一首部)的请求时,服务器端允许访问资源,但是请求为满足条件的情况下返回改状态码;
307 Temporary Redirect:临时重定向,与303有着相同的含义,307会遵照浏览器标准不会从POST变成GET;(不同浏览器可能会出现不同的情况);
4xx (4种)
400 Bad Request:表示请求报文中存在语法错误;
401 Unauthorized:未经许可,需要通过HTTP认证;
403 Forbidden:服务器拒绝该次访问(访问权限出现问题)
404 Not Found:表示服务器上无法找到请求的资源,除此之外,也可以在服务器拒绝请求但不想给拒绝原因时使用;
5xx (2种)
500 Inter Server Error:表示服务器在执行请求时发生了错误,也有可能是web应用存在的bug或某些临时的错误时;
503 Server Unavailable:表示服务器暂时处于超负载或正在进行停机维护,无法处理请求;
状态码 | 简述 | 详述 |
---|---|---|
1xx | 消息相关的 | 代表请求已经收到,继续处理。这个状态码的分类意味着一个临时的响应,仅有状态行和可选的头部信息组成,并且有一个空行结尾。因为HTTP/1.0并没有定义任何1xx相关的状态码,所以服务器应该发出一个1xx的响应给一个HTTP/1.0的客户端除非在实验条件下。 |
100 | 继续 | 这意味着服务器已经收到请求的头部信息了,客户端应该继续发送请求的主体部分。如果请求的主体部分很大,可能会出现服务器因为不匹配的头部信息的原则拒绝了请求。因此,为了让服务器只通过请求的头部信息就检查请求能否被接受,客户端必须将 Extpect: 100-continue作为初始化请求并且监测100-continue状态码是否被服务器收到在继续发送请求体之前(或者收到417 Expectation Failed状态码并且不再继续) |
101 | 切换协议 | 这意味着请求者要求服务器切换协议并且服务器也确认将会那么做。 |
102 | 处理中 | 作为一个WebDAV的请求可能包含多个子请求包括文件操作等,这将可能花费很长时间去完成操作。这个状态码意味着服务器已经收到了请求,并且正在处理中,所以当前暂无响应。这样将避免客户端因为超时而认为当前请求丢失。 |
2XX | 成功 | 这一类状态码意味着请求的行为已经被客户端收到、理解接受而且被成功地处理。 |
200 | 成功 | 成功HTTP请求的标准响应状态码。不过实际的响应取决于请求者所使用的方法。如果在一个GET的请求中,响应将会包含对应资源的实体。而在一个POST请求中,响应将会包含一个实体的描述或者是请求行为的结果。 |
201 | 已创建 | 请求已经被满足,并且一个新的资源将会被创建。 |
202 | 接受 | 请求已经被接受并被处理,但是处理还没有完成。请求可能最终不会采取行动,因为在执行过程中可能会被打断。 |
203 | 非权威的信息 | 服务器成功处理请求,但是返回信息可能来自其它源。 |
204 | 无内容 | 服务器成功处理请求,但是没有返回任何内容。通常被用来被作为成功删除的请求的响应。 |
205 | 重置内容 | 服务器成功处理请求,但是没有返回任何内容。和204不同的是,响应需要请求者重置文档视图。 |
206 | 部分内容 | 服务器只返回了一部分资源因为客户端发送了一系列的请求头。这些请求头被像wget的工具去恢复已经被中断的下载,或者将下载分成多个同步的流。 |
207 | 多状态 | 紧跟消息体后面的是xml消息并且包含了多个单独的响应状态码,响应的数量取决于子请求的个数。 |
208 | 已经报告 | 一个DAV的绑定成员被前一个请求枚举,并且没有被再一次包括。 |
226 | IM Used | 服务器已经满足了请求所要的资源,并且响应是一个或者多个实例操作应用于当前实例的结果。 |
3XX | 跳转 | 这一类状态码意味着客户端必须执行额外的动作去完成请求。大部分这些状态码被用于url重定向。只有当第二请求方法是GET或者是HEAD的情况下,用户代理可能会执行额外的动作在没有用户交互的情况下。一个用户代理不能自动地重定向请求超过5次,因为这样的重定向经常意味着一个死循环。 |
300 | 多重选择 | 意味着对于这个资源有多个选项需要客户端注意。例如,可以用来展示不同格式的视频,使用不同的扩展名列出文件,或者消除文字的歧义。 |
301 | 永久移动 | 当前以及未来的所有请求应该被定位到指定的url上去。 |
302 | 发现 | 这是工业实践和标准相矛盾的例子。HTTP/1.0规范需要客户端执行一个临时的跳转(原始的描述短语是”临时移动”),但是流行的浏览器使用303查看其它的功能去实现302.因此,HTTP/1.1添加了状态码303和307去分辨这两个操作。然而,一些web程序和框架使用302状态码就好像它是303一样。 |
303 | 查看其它 | 当前请求的响应能够在其它的URI地址上使用GET方法发现。当接收到一个POST响应的请求,则应该假设服务器已经收到数据而且跳转应该发出一个单独的GET消息。 |
304 | 未修改 | 意味着资源没有被修改因为请求头指定的版本跟本地保存的版本并未修改或没有匹配。这说明没有必要重新传输资源,因为客户端仍然有一个以前下载的副本。 |
305 | 使用代理(自从HTTP/1.1) | 请求的资源只能通过代理才能访问,并且访问的地址由响应提供。很多HTTP客户端(像火狐和IE)因为安全问题,不能正确地处理该响应。 |
306 | 切换代理 | 不再使用。原意是随后的请求应该使用指定的代理。 |
307 | 临时跳转(自从HTTP/1.1) | 在这种情况下,当前请求应该被另一个URI地址重新发送,然而未来的请求仍然应该使用原始的URI地址。和302不同的是历史实现,请求方法不允许改变当重新发送原始请求。例如,一个POST请求应该被另一个POST请求重新发送。 |
308 | 永久转移 | 这个请求和以后的请求都应该被另一个URI地址重新发送。307、308和302、301有相同的表现,但是不允许HTTP方法改变。例如,请求表单到一个永久转移的资源将会继续顺利地执行。 |
4XX | 客户端错误 | 4XX类别的状态码是为了预防客户端出现错误的情况。除了响应请求头的情况,服务器应该包括错误情形解释的实体无论是临时的还是永久的条件。这些状态码可以和任何请求方法匹配。用户代理应该展示可以被包括的实体给用户。 |
400 | 错误请求 | 服务器因为一些事情感知到客户端的错误而不继续处理请求(例如不正确的请求语法,无效的请求消息框架,以及虚假的请求路由)。 |
401 | 未授权 | 和403禁止相似,但是明确用于需要授权的、失败的或者是不支持的。响应必须包括适用于请求资源的WWW-认证头字段。查看基本访问认证和数字访问认证。 |
402 | 需要付款 | 为以后保留使用。原意是该状态码可被用于一些数字货币或者是微支付,但是目前还没有普及,所以这些代码不经常被使用。YouYube使用这个状态如果某个IP地址发出了过多的请求,并要求用户输入验证码。 |
403 | 禁止访问 | 这个请求是一个有效的请求,但是服务器拒绝响应它。和401未授权的响应不同,是否授权并没有区别。 |
404 | 找不到 | 请求资源无法被找到但是可能以后会再次有效。客户端以后发出的请求也是被允许的。 |
405 | 方法不允许 | 请求由不支持该方法的资源发出。例如,使用GET方法在一个需要数据通过POST展现的表单或者是使用PUT在一个只读的资源中。 |
406 | 不可接受的 | 被请求的资源只能用于生成内容而不会接收发送请求中的头。 |
407 | 需要代理认证 | 客户端必须首先使用代理认证自己。 |
408 | 请求超时 | 服务器超时等待请求。根据HTTP规范:”客户端在服务器等待期间没有发出任何请求”。客户端可能会在未来的某个时候重复请求而不做任何修改。 |
409 | 冲突 | 意味着请求不能被处理因为存在冲突,例如多个更新的情况下存在修改冲突。 |
410 | 遗失的 | 当前状态意味着被请求的资源不再有效并且以后也不会再次生效。一般用于一个资源被有意地删除或者资源需要被清除。一旦接收410状态码,客户端将不应该再次请求该资源。例如搜素引擎应该从它们的下表中移除资源。大部分用例并不需要客户端和搜索引擎清空资源,而是使用404找不到来代替。 |
411 | 长度要求 | 请求没有指定内容的长度,但是请求的资源需要指定。 |
412 | 前置条件失败 | 服务器不满足请求者所请求的预置条件。 |
413 | 响应实体太大 | 请求超过服务器所能处理和允许的最大值。 |
414 | 请求-URI太长 | 被提供的URI对服务器的处理来说太长。经常出现在太多被编码的数据被作为查询字符串的GET请求的结果,因此需要被转换为POST请求。 |
415 | 不被支持的媒体类型 | 请求实体的媒体类型不被服务器或者资源支持。例如,客户端上传一个image/svg+xml的图片,但是服务器需要图片使用不同的格式。 |
416 | 请求范围不能满足 | 客户端要求文件的部分(字节服务),但是服务器不能提供那部分的内容。例如,如果客户端要求的部分超过文件的底端。 |
417 | 期望失败 | 服务器期望请求头字段的要求。 |
418 | 我是一个茶壶 | 这个代码是在1998年作为传统的IETF April Fools’ jokes被定义的在RFC2324,超文本咖啡罐控制协议,但是并没有被实际的HTTP服务器实现。RFC指定了这个代码应该是由茶罐返回给速溶咖啡。 |
419 | 认证超时 | 并不是HTTP标注的一部分,419认证超时表示以前的有效证明已经失效了。同时也被用于401未认证的替代选择为了从其它被拒绝访问的已认证客户端中指定服务器的资源。 |
420 | 方法失效 | 不是HTTP的标准,但是被Spring定义在HTTP状态类中当方法失时使用。这个状态码已经不推荐在Spring中使用。 |
420 | 提高你的耐心 | 也不是HTTP标准的一部分,但是被版本1的Twitter搜索和趋势APi返回当客户端的速率被限制的时候。其它的服务提供商可能会使用429太多的请求响应码来代替。 |
421 | 误导请求 | 请求被直接定向到不能产生响应的服务器上(例如因为一个连接的复用)。 |
422 | 不可处理的实体(WebDAV) | 请求符合要求但是不能接受错误由于语法错误。 |
423 | 锁定的 | 资源访问被锁定。 |
424 | 失败的依赖 | 请求由于上一个请求的失败而失败。 |
426 | 需要升级 | 客户端应该切换不同的协议例如TLS/1.0在指定的升级的头字段里。 |
428 | 需要前置条件 | 原始服务器需要有条件的请求。当客户端GET一个资源的状态的时候,同时又PUT回给服务器,与此同时第三方修改状态到服务器上的时候,为了避免丢失更新的问题发生将会导致冲突。 |
429 | 过多请求 | 用户已经发送了太多的请求在指定的时间里。用于限制速率。 |
431 | 请求头部字段太大 | 服务器由于一个单独的请求头部字段或者是全部的字段太大而不愿意处理请求。 |
440 | 登陆超时(微软) | 一个微软的扩展,意味着你的会话已经超时。 |
444 | 无响应 | 被使用在Nginx的日志中表明服务器没有返回信息给客户端并且关闭了连接(在威慑恶意软件的时候比较有用)。 |
449 | 重试(微软) | 一个微软的扩展。请求应该在执行适当的动作之后被重试。 |
450 | 被Windows家长控制阻塞(微软) | 一个微软的扩展。这个错误是当Windows家长控制打开并且阻塞指定网页的访问的时候被指定。 |
451 | 由于法律原因而无效(因特网草稿) | 被定义在因特网草稿“一个新的HTTP状态码用于法律限制的资源”。被用于当资源的访问由于法律原因被禁止的时候。例如检查制度或者是政府强制要求禁止访问。一个例子是1953年dystopian的小说Fahrenheit 451就是一个非法的资源。 |
451 | 重定向(微软) | 被用在Exchange ActiveSync中如果一个更有效的服务器能够被使用或者是服务器不能访问用户的邮箱。客户端会假定重新执行HTTP自动发现协议去寻找更适合的服务器。 |
494 | 请求头太大(Nginx) | Nginx内置代码和431类似,但是是被更早地引入在版本0.9.4(在2011年1月21日)。 |
495 | 证书错误(Nginx) | Nginx内置的代码,当使用SSL客户端证书的时候错误会出现为了在日志错误中区分它和4XX和一个错误页面的重定向。。 |
496 | 没有证书(Nginx) | Nginx内置的代码,当客户端不能提供证书在日志中分辨4XX和一个错误页面的重定向。 |
497 | HTTP到HTTPS(Nginx) | Nginx内置的代码,被用于原始的HTTP的请求发送给HTTPS端口去分辨4XX在日志中和一个错误页面的重定向。 |
498 | 令牌超时或失效(Esri) | 由ArcGIS for Server返回。这个代码意味着令牌的超时或者是失效。 |
499 | 客户端关闭请求(Nginx) | 被用在Nginx日志去表明一个连接已经被客户端关闭当服务器仍然正在处理它的请求,是的服务器无法返货状态码。 |
499 | 需要令牌(Esri) | 由ArcGIS for Server返回。意味着需要一个令牌(如果没有令牌被提交)。 |
5XX | 服务器错误 | 服务器似乎不能满足有效的请求,以数字5开头的响应状态码意味着服务器已经意识到遇到了一个错误或者是无法发送请求。除了响应HEAD请求的时候,服务器应该包含一个保存错误情形解释的实体,并且标识这个情况是暂时的还是永久的。同样地,用户代理也应该展示任何被包含的实体给用户。这些响应码适用于任何请求方法。 |
500 | 服务器内部错误 | 一个普通的错误信息,当一个意外的情况出现并且没有其它明确的消息是合适的。 |
501 | 没有实现 | 服务既不能识别请求方法,也缺少满足请求的能力。一般会在将来可用(例如一个新的web-service接口特性) |
502 | 错误的网关 | 服务器作为一个网关或者代理,从上游的服务器中接收到无效的响应。 |
503 | 服务不可用 | 服务当前不可用(因为过载或者下线维护)。一般而言,只是一种暂时的状态。 |
504 | 网关超时 | 服务器作为一个网关或者代理,但是没有从上游服务器收到即时的响应。 |
505 | HTTP版本不支持 | 服务器不支持在请求中使用的HTTP协议。 |
506 | 变量也是导航 | 对于请求是透明的内容导航导致循环参照。 |
507 | 存储不足 | 服务器不能存储需要的内容去完成请求。 |
508 | 发现环路 | 服务器发现了一个无限的循环档处理请求的时候。 |
509 | 频带宽度超出限制(Apache的扩展) | 这个状态码没有在任何RFCS中指定。使用方法是未知的。 |
511 | 需要网络授权 | 客户端需要授权去火的网络的访问权限。一般用于代理交互中被用来进行网络的访问控制。 |
520 | 未知错误 | 这个状态码也没有被指定在任何RFC中,并且只会被一些服务器返回,例如微软的Azure和CloudFlare服务器:”520错误本质上是一个捕获全部的响应当原始服务器返回一些未知的或者一些不能被忍受或者被解释的(协议违反或者空响应)”。 |
598 | 网络读取超时异常(未知) | 这个状态码也没有在任何RFC中指定,但是被用在微软的HTTP代理中去标注一个网络读取超时在一个客户端之前的代理的后面。 |
599 | 网络连接超时异常(未知) | 这个状态码也没有在任何RFC中指定,但是被用在微软的HTTP代理中去标注一个网络连接超时在一个客户端之前的代理的后面。 |