HTTP状态码分类

HTTP状态码分类分为5

总体范围 已定义范围 类别
100~199 100~101 信息
200~299 200~206 成功
300~399 300~305 重定向
400~499 400~417 客户端错误
500~599 500~505 服务器错误

信息性status code

状态码 短语原因 含义
100 Continue
【继续】
说明收到了请求的初始部分,请客户端继续
101 Switching Protocols
【切换协议】
说明服务器正在根据客户端的指定,
将协议切换成Update首部所列的协议

100 (Continue / 继续)

目的:
HTTP客户端应用程序有一个实体的主体部分要发送给服务器,但希望在发送之前查看一下服务器是否会接受这个实体。

作用:
100 Continue 是一种优化。客户端应用程序只有在避免向服务器发送一个服务器无法处理或使用的大实体时,才应该使用100 Continue。

过程:
1)如果客户端在向服务器发送一个实体,并且愿意在发送实体之前等待100 Continue响应,那么,客户端就要发送一个携带了值为100 Continue 的 Expect 请求首部;
2)如果服务器收到了一条带有值为100-continue 的 Expect 首部的请求,这是指客户端询问是否可以在后续的请求中发送附件。在这种情况下,服务器用100-Continue允许客户端继续或用417 (Expectation Failed)告诉客户端不同意接受附件。

101 (Switching Protocol / 切换协议)

作用:
只有在切换新的协议更有好处的时候才应该采取类似措施。例如,切换到新的HTTP版本比旧版本更有优势,或者切换到一个实时且同步的协议以传送利用此类特性的资源。

成功status code

状态码 短语原因 含义
200 OK 服务器已成功处理请求
201 Created
【已创建】
对那些要服务器创建对象的请求来说,资源已创建完毕。
通常这是 PUT 方法得到的响应码。
202 Accepted
【已接受】
请求已接受,但服务器尚未处理
203 Non-Authoritative Information
【非权威信息】
实体首部包含的信息不是来自源端服务器,而是来自资源的一份副本
204 No Content
【没有内容】
响应报文包含一些首部和一个状态行,但不包含实体的主体内容
205 Reset Content
【重置内容】
浏览器应该重置当前页面上所有的HTML表单
206 Partial Content
【部分内容】
成功执行了一个部分或Range(范围)请求

200 (OK / 成功)

请求成功.成功的意义根据请求所使用的方法不同而不同.

  • GET: 资源已被提取,并作为响应体传回客户端.
  • HEAD: 实体头已作为响应头传回客户端
  • POST: 经过服务器处理客户端传来的数据,适合的资源作为响应体传回客户端.
  • TRACE: 服务器收到请求消息作为响应体传回客户端.

PUT, DELETE, 和 OPTIONS 方法永远不会返回 200 状态码.

201(Created / 已创建)

对于创建服务器对象的请求(比如,PUT)。响应的实体主体部分中(Location首部)应包含各种引用了已创建的资源的URL。服务器必须在发送这个状态码之前创建好对象。

202(Accepted / 已接受)

请求已被接受,但服务器还未对其执行任何动作。正如它可能被拒绝一样,最终该请求可能会也可能不会被执行。

目的:
在异步操作的场合下,没有比发送这个状态码更方便的做法了。允许服务器接受其他过程的请求(例如某个每天只执行一次的基于批处理的操作),而不必让客户端一直保持与服务器的连接直到批处理操作全部完成。

优点:
服务器应当在返回的实体中包含一些指示处理当前状态的信息,以及指向处理状态监视器或状态预测的指针,以便用户能够估计操作是否已经完成。

203(Non-Authoritative Information / 非权威信息)

服务器已成功处理了请求,但返回的实体头部元信息不是在原始服务器上有效的确定集合,而是来自本地或者第三方的拷贝。

原因:
中间节点上有一份资源副本,但无法或者没有对它所发送的与资源有关的元信息(首部)进行验证,就会出现这种情况。 如果不是上述情况,使用200状态码才是最合适的.

204(No Content / 没有内容)

代表服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分。也不允许返回任何主体。

没有新文档。浏览器应该继续显示原来的文档。

用处:
1)确定先前的页面是否已经更新。
2)用户代理可以根据新的响应头来更新对应资源的缓存信息。
3)主要用于浏览器不转为显示新文档的情况下,对其进行更新(比如刷新一个表单页面)。
4)这各状态码对于用户周期性的重载某一页非常有用。如果用户定期地刷新页面,而Servlet可以确定用户文档足够新。

205(Reset Content / 重置内容)

没有新文档。但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容。

206(Partial Content / 部分内容)

客户端发送了一个带Range头的请求(GET)来获取部分或者某个范围内的文档,服务器完成了它。 206响应中必须包含Content-Range、Date 以及 ETag 或 Content-Location 首部。

重定向status code

状态码 短语原因 含义
300 Multiple Choices
【多项选择】
客户端请求了实际指向多个资源的URL
301 Moved Permanently
【永久搬离】
所请求的页面已经转移至新的url
302 Found
【已找到】
所请求的页面已经临时转移至新的url
303 See Other
【参见其他】
告知客户端应该用另一个URL来获取资源
304 Not Modified
【未修改】
告诉客户端,所请求的内容距离上次访问并没有变化。
客户端可以直接从浏览器缓存里获取该资源.
305 Use Proxy
【使用代理】
请求的文档要通过定位头信息中的代理服务器获得
306 Unused
【未使用】
当前未使用
307 Temporary Redirect
【临时重定向】
与302状态码有相同的语义,且前后两次访问必须使用相同的方法(GET POST)

300(Multiple Choices / 多项选择)

表示被请求的文档可以在多个地方找到,比如服务器上有某个HTML文档的英语和法语版本。 返回这个代码时会带有一个选项列表,这样用户就可以选择他希望使用的那一项了。

301(Moved Permanently / 永久搬离)

请求的URL已永久移走。响应的 Location 首部中应该包含资源现在所处的 URL。

302(Found / 已找到)

与301有些类似。但这里的搬离是临时的,并且还可能继续改变。 客户端应该使用 Location 首部给出 URL 对资源进行临时定位。 将来的请求仍应使用老的URL

303(See Other / 参见其他)

新的URL位于响应报文的Location首部。

明确表明客户端应该使用GET方法定向获取请求的资源。

目的:
允许POST请求的响应将客户端定向到某个资源上去。 如果最初的请求是 POST ,服务器发送该响应用来引导客户端使用GET方法访问另外一个URL。

304(Not Modified / 未修改)

当客户端有一个缓存的文档,通过提供一个 If-Modified-Since 头信息可指出客户端只希望文档在指定日期之后有所修改时才会重载此文档,用这种方式可以进行有条件的请求。服务器告诉客户,原来缓冲的文档还可以继续使用。 带有304状态码的响应不应该包含实体的主体部分。

305(Use Proxy / 使用代理)

必须通过一个代理来访问资源,代理的位置由Location首部给出。

缺点:
如果客户端错误地让代理介入了某条请求,可能会引发破坏性的行为,而且会造成安全漏洞。so该状态码并未受到广泛支持。

306(Unused / 未使用)

当初它被用在HTTP 1.1规范的旧版本中。目前已不再使用,但是代码依然被保留。

307(Temporary Redirect / 临时重定向)

需要跟用户询问是否应该在新URI上发起POST方法,也就是说,307是不会把POST转为GET的

302、303、307之间的区别

他们都是重定向,并且有细微的区别,他们的区别主要来源于HTTP/1.0 和HTTP/1.1 应用程序对这些状态码处理方式不同而不同。

http1.0:只有302码,没有303和307状态码;

http1.1:有302(理论上是可以放弃的,为了兼容1.0被保留,而且因为目前程序都没那么讲究所以302大量出现在一些项目上),303,307

302:HTTP/1.0和HTTP/1.1中的表现都是一样的,浏览器对它的处理也是一样的

303:POST重定向为GET。

307:需要跟用户询问是否应该在新URI上发起POST方法,也就是说,307是不会把POST转为GET的

客户端错误status code

状态码 短语原因 含义
400 Bad Request
【错误请求】
告知客户端发送了一条错误的请求
401 Unauthorized
【未授权】
需要身份验证后才能获取所请求的内容
402 Payment Required
【要求付款】
当前该状态码尚未使用
403 Forbidden
【禁止访问】
服务器拒绝了请求
404 Not Found
【未找到】
服务器无法找到所请求的URL
405 Method Not Allowed
【不允许使用的方法】
请求方法对某些特定的资源不允许使用
406 Not Acceptable
【无法接受】
服务器生成的响应无法被客户端所接受
407 Proxy Authentication Required
【要求进行代理认证】
与401类似,用户必须首先使用代理服务器进行验证
408 Request Timeout
【请求超时】
服务端等待客户端发送请求的时间过长
409 Conflict
【冲突】
发出的请求在资源上造成一些冲突
410 Gone
【消失了】
除了服务器曾经拥有过此资源外,与404类似
411 Length Required
【要求长度指示】
服务器在本次请求中需要 Content-Length 首部
412 PreCondition Failed
【先决条件失败】
服务器没能满足客户端在获取资源时在请求头字段中设置的先决条件
413 Request Entity Too Large
【请求实体太大】
客户端发送的实体主体部分比服务器能够或者希望处理的要大
414 Request URI Too Long
【请求URI太长】
客户端请求所包含的URI地址太长
415 Unsupported Media Type
【不支持的媒体类型】
服务器不支持客户端所发送的实体的内容类型
416 Requested Range Not Satisfiable
【所请求的范围未得到满足】
请求报文所请求的是指定资源的某个范围,
而此范围无效或者无法满足。
417 Expectation Failed
【无法满足期望】
请求的Expect首部包含了一个预期内容,但服务器无法满足

400(Bad Request / 错误请求)

客户端发送的请求语法错误,服务器无法正常读取。

401(Unauthorized / 未授权)

被请求的页面需要用户名和密码。 类似于403错误.不同点是.401错误后,只要正确输入帐号密码,验证即可通过.

402(Payment Required / 要求付款)

该状态码被保留以供将来使用.创建此代码最初的目的是为数字支付系统而用,然而,到现在也没投入使用.

403(Forbidden / 禁止访问)

客户端没有权利访问所请求内容,服务器拒绝本次请求.

禁止原因:
如果服务器想说明为什么拒绝请求,可以包含实体的主体部分来对原因进行描述。但这个状态码通常是在服务器不想说明拒绝原因的时候使用。

这个状态经常会由于服务器上的损坏文件或目录许可而引起。

404(Not Found / 未找到)

通常会包含一个实体,以便客户端应用程序显示给用户看。
由于经常发生此种情况,所以该状态码在上网时是非常常见的.

405(Method Not Allowed / 不允许使用的方法)

该请求使用的方法被服务器端禁止使用,[GET 和 HEAD 方法不能被禁止]。 响应中应该包含一个Allow首部,以告知客户端所请求的资源支持使用哪些方法。

406(Not Acceptable / 无法接受)

请求资源的MIME类型与客户端中Accept头信息中指定的类型不一致.客户端可以指定参数来说明它们愿意接收什么类型的实体。服务器没有与客户端可接受的URL相匹配的资源时,使用此代码。通常,服务器会包含一些首部,以便客户端弄清为什么请求无法满足。

407(Proxy Authentication Required / 要求进行代理认证)

与401状态有些相似,只是这个状态用于代理服务器。该状态指出客户端必须通过代理服务器的认证。

408(Request Timeout / 请求超时)

如果客户端完成其请求时花费的时间太长,服务器可以送回这个状态码并关闭连接。

409(Conflict / 冲突)

该状态通常与PUT请求一同使用,常被用于试图上传版本不正确的文件时。

410(Gone / 消失了)

告诉客户端所请求的文档已经不存在并且没有更新的地址。410状态不同于404,410是在指导文档已被移走的情况下使用,而404则用于未知原因的无法访问。

用处:
主要用于Web站点的维护,这样服务器的管理者就可以在资源被移除的情况下通知客户端。

411(Length Required / 要求长度指示)

如果发起的请求中没有Content-Length 首部,服务器是不会接受此资源请求的。

412(PreCondition Failed / 先决条件失败)

如果客户端发起了一个条件请求,如果服务器无法满足其中的某个条件,就返回这个状态码。

413(Request Entity Too Large / 请求实体太大)

告诉客户端现在所请求的文档比服务器现在想要处理的要大。如果服务器认为能够过一段时间处理,则会包含一个Retry-After的响应头信息。

414(Request URI Too Long / 请求URI太长)

由于url太长,服务器不会接受请求。

这里所指的“URI”是指URL中主机、域名及端口号之后的内容。例如:在URL–http://www.y2k-disaster.com:8080/we/look/silly/now/中URI是指/we/look/silly/now/。

当post请求被转换为带有很长的查询信息的get请求时,就会发生这种情况。

415(Unsupported Media Type / 不支持的媒体类型)

416(Requested Range Not Satisfiable / 所请求的范围未得到满足)

417(Expectation Failed / 无法满足期望)

服务端错误status code

状态码 短语原因 含义
500 Internal Server Error
【内部服务器错误】
服务器遇到未知的无法解决的问题,
使其无法为请求提供服务
501 Not Implemented
【未实现】
服务器不支持该请求中使用的方法
502 Bad Gateway
【网关故障】
服务器作为网关且从上游服务器获取到了一个无效的HTTP响应
503 Service Unavailable
【服务不可用】
服务器目前无法为请求提供服务,
但过一段时间就可以恢复服务
504 Gateway Timeout
【网关超时】
服务器作为网关且不能从上游服务器及时的得到响应返回给客户端
505 HTTP Version Not Supported
【不支持的HTTP版本】
服务器不支持客户端发送的HTTP请求中所使用的HTTP协议版本

500(Internal Server Error / 内部服务器错误)

501(Not Implemented / 未实现)

502(Bad Gateway / 网关故障)

503(Service Unavailable / 服务不可用)

由于临时的服务器维护或者过载,服务器当前无法处理请求.这个状况是临时的,并且将在一段时间以后恢复.如果能够预计延迟时间,那么响应中可以包含一个Retry-After:头用以标明这个延迟时间.如果没有给出这个Retry-After:信息,那么客户端应当以处理500响应的方式处理它.同时,这种情况下,一个友好的用于解释服务器出现问题的页面应当被返回,并且,缓存相关的HTTP头信息也应该包含,因为通常这种错误提示网页不应当被客户端缓存.

504(Gateway Timeout / 网关超时)

505(HTTP Version Not Supported / 不支持的HTTP版本)

更多-more