HTTP常见状态码详细解析

  • 格式:pdf
  • 大小:249.54 KB
  • 文档页数:5

HTTP常见状态码详细解析

HTTP状态码(英语:HTTP Status Code)是⽤以表⽰⽹页服务器 超⽂本传输协议响应状态的3位数字代码。

它由 RFC 2616 规范定义的,并得到 RFC 2518、RFC 2817、RFC 2295、RFC 2774 与 RFC 4918 等规范扩展。

HTTP状态码负责表⽰客户端HTTP请求的返回结果、标记服务端的处理是否正常、通知出现的错误等⼯作。

状态码的类别

的由三位数字和原因短语组成,数字的第⼀位数字表⽰响应的类别,后⾯两位⽆类别。以下有五种类别。另外只要遵循状态码类别的定义,即使改变RFC2616中定义的状态码,

或者服务端⾃⾏创建状态码都可以。1XX

类别:informational 信息性状态码

原因短语:接收的请求正在处理2XX

类别:success 成功状态码

原因短语:请求正常处理完毕3XX

类别:redirection 重定向状态码

原因短语:需要进⾏附加操作以完成请求4XX

类别:client error 客户端错误状态码

原因短语:服务器⽆法处理请求5XX

类别:server error 服务器错误状态码

原因短语:服务器处理请求出错

在RFC2616上的http状态码达到40多种,在加上WEBDAV和附加HTTP状态码(RFC6585)等扩展,就有60多种,但常⽤的有以下这些,接下来让我们分别来学习下。

(注:以下的使⽤场景只是举例,不包括所有使⽤场景)

1xx Informational 信息响应

1XX 是信息响应,表⽰接收的请求正在被处理。

100 Continue (继续)

响应结果:信息型状态响应码表⽰⽬前为⽌⼀切正常, 客户端应该继续请求, 如果已完成请求则忽略.

使⽤场景:为了让服务器检查请求的⾸部, 客户端必须在发送请求实体前, 在初始化请求中发送 Expect: 100-continue ⾸部并接收 100 Continue 响应状态码.

101 Switching Protocols (协议切换)

响应结果:表⽰服务器应客户端升级协议的请求(Upgrade请求头)正在进⾏协议切换。服务器会发送⼀个Upgrade响应头来表⽰其正在切换过去的协议。

使⽤场景:

在使⽤ WebSockets 时会⽤到协议切换。

HTTP/1.1 101 Switching Protocols

Upgrade: websocket

Connection: Upgrade

2xx Successful 成功响应

2XX 表⽰请求被正常处理了。

200 OK (成功)响应结果:请求成功,表⽰客户端发来的请求在服务端被正常处理了。不同的请求⽅法对请求成功的意义不同:

GET⽅法请求时,对应的请求资源实体会作为响应返回;

HEAD⽅法请求时,对应请求资源的实体⾸部不随报⽂主体作为响应返回,即响应中只返回⾸部,不返回实体的主体部分;

POST⽅法请求时,响应的消息体重包含请求的结果

201 Created (已创建)响应结果:该请求已成功,并因此创建了⼀个新的资源。

使⽤场景:作为PUT请求的返回值。

202 Accepted(已接受)响应结果:服务端收到请求,但未处理。

使⽤场景:这个状态码被设计⽤来将请求交由另外⼀个进程或者服务器来进⾏处理,或者是对请求进⾏批处理的情形。

203 Non-Authoritative Information(⾮权威信息)

响应结果:服务器已成功处理了请求,但返回的实体头部元信息不是在原始服务器上有效的确定集合,⽽是来⾃本地或者第三⽅的拷贝。当前的信息可能是原始版本的⼦集或者超集。

使⽤场景:通过代理访问原始服务器的时候,成功获取了原始服务器(状态码200)的返回内容,但是代理对内容作出了⼀些改动,代理会通过这个状态码告知⽤户,成功

获取内容,但是这部分内容和原始服务器的返回内容可能不完全⼀致。

204 No Content (没有内容)

响应结果:服务器成功处理了客户端请求,但服务器⽆返回内容。204是HTTP中数据量最少的响应状态,204的响应中没有body,⽽且Content-Length=0。

使⽤场景:204状态在⼀些⽹站分析的代码中最常⽤到,只需要把客户端的⼀些信息提交给服务器⽽⽆需关⼼响应。205 Reset Content (重置内容)

响应结果:服务器成功处理了请求,且没有返回任何内容。但是与204响应不同,返回此状态码的响应要求请求者重置⽂档视图。

使⽤场景:⽤来通知客户端重置⽂档视图,⽐如清空表单内容、重置 canvas 状态或者刷新⽤户界⾯。

206 Partial Content (部分内容)

响应结果:表⽰客户端进⾏了范围请求,⽽服务器成功执⾏了这部分GET请求。响应报⽂中包含由Content-Range指定范围的实体内容。

使⽤场景:类似于 FlashGet 或者迅雷这类的 下载⼯具都是使⽤此类响应实现断点续传或者将⼀个⼤⽂档分解为多个下载段同时下载。该请求必须包含 Range 头信息来指

⽰客户端希望得到的内容范围,并且可能包含 If-Range 来作为请求条件

3xx Redirection 重定向

3XX响应结果表明浏览器需要执⾏某些特殊的处理以正确的处理请求。

300 Multiple Choices (多项选择)响应结果:是⼀个⽤来表⽰重定向的响应状态码,表⽰该请求拥有多种可能的响应。⽤户代理或者⽤户⾃⾝应该从中选择⼀个。

使⽤场景:由于没有如何进⾏选择的标准⽅法,这个状态码极少使⽤。

301 Moved Permanently()

响应结果:表⽰请求的资源已被分配了新的URL,以后应使⽤现在所指的URL。也就是说如果已经吧资源对应的URL保存为书签了,这时应该按Location⾸部字段提⽰的

URL重新保存。使⽤场景:域名到期不想续费(或者发现了更适合⽹站的域名),想换个域名。

在搜索引擎的搜索结果中出现了不带www的域名,⽽带www的域名却没有收录,这个时候可以⽤301重定向来告诉搜索引擎我们⽬标的域名是哪⼀个。

空间服务器不稳定,换空间的时候。

302 Found(临时性重定向)

响应结果:该状态码表⽰请求的资源已被分配了新的URL,希望⽤户(本次)能使⽤新的URL访问。

使⽤场景:尽量使⽤301!

303 See Other(参见其他)

响应结果:表⽰由于请求对应的资源存在这另⼀个URL,应使⽤GET⽅法定向获取请求的资源。303与302不同之处在于,302是不会改变请求的⽅法,如果请求⽅法是

POST的话,重定向的请求也应该是POST。⽽对于303,使⽤POST请求的话,重定向的请求应该是GET请求。

使⽤场景:未知。

304 Not Modified(未修改)

响应结果:该状态码表⽰客户端发送附带条件的请求(指采⽤GET⽅法的请求报⽂中包含)时,服务器端允许请求访问资源,但未满⾜条件的情况。304状态码返回时,不包含

任何响应的主体。304虽然在3xx类别中,但是和重定向没关系。

使⽤场景:在 Web 页⾯中查看任务详情时,要求能够不刷新页⾯便⾃动的更新它的状态与⽇志等信息(任务的执⾏会花费⼀定的时间,同时后台在处理任务的过程中会同

步它的状态与⽇志的更新)。因为任务的状态更新可接受短暂的延时,所以不必采⽤长连接的⽅式,客户端只需要定时往服务器发送获取数据的请求即可,但是任务的数据

量较⼤,如果任务并未发⽣改变,就查询它全部的相关信息并返回到客户端对性能⽽⾔必然不是最优的选择,所以我们需要在它发⽣改变后才查询并返回数据,那么这⾥就

可以引⼊ 304 状态码来解决任务⽆变化时的返回结果。

305 Use Proxy (使⽤代理)响应结果:被请求的资源必须通过指定的代理才能被访问。

使⽤场景:未知。

306 (Unused)

在最新版的规范中,306状态码已经不再被使⽤。

307 Temporary Redirect (临时重定向)

响应结果:该状态码与302有着相同的含义。尽管302标准禁⽌POST变换成GET,但实际使⽤时⼤家并不遵守。307会遵照浏览器标准,不会从POST变成GET。但是,对于处理响应时的⾏为,每种浏览器有可能出现不同的情况。

使⽤场景:同302

308 Permanent Redirect(永久重定向)

响应结果:是表⽰重定向的响应状态码,说明请求的资源已经被永久的移动到了由 Location ⾸部指定的 URL 上。浏览器会进⾏重定向,同时搜索引擎也会更新其链接(⽤

SEO 的⾏话来说,意思是链接汁被传递到了新的 URL)。在重定向过程中,请求⽅法和消息主体不会发⽣改变,然⽽在返回 301 状态码的情况下,请求⽅法有时候会被客

户端错误地修改为 GET ⽅法。

使⽤场景:⼀些 Web 应⽤可能会将 308 Permanent Redirect 以⼀种⾮标准的⽅式使⽤以及⽤作其他⽤途。例如,Google Drive 会使⽤ 308 Resume Incomplete 状态码来

告知客户端⽂件上传终⽌且不完整。

4xx Client Error客户端响应

4XX的响应结果表明客户端是发⽣错误的原因所在。

400 Bad Request(坏请求)

响应结果:该状态码表⽰请求报⽂中存在语法错误。当错误发⽣时,需要修改请求的内容后再次发送请求。另外,浏览器会像200OK⼀样对待该状态码。

出现原因:语义有误,当前请求⽆法被服务器理解。除⾮进⾏修改,否则客户端不应该重复提交这个请求。请求参数有误。

401 Unauthorized(未授权)

-响应结果:表⽰发送的请求需要有通过HTTP认证的认证信息。另外若之前已进⾏过⼀次请求,则表⽰⽤户认证失败。返回含有401响应必须包含⼀个适⽤于被请求资源的

WWW-Authenticate ⾸部⽤以质询⽤户信息。当浏览器初次接收到401响应,会弹出认证⽤的对话窗⼝。

出现原因:客户端错误,指的是由于缺乏⽬标资源要求的⾝份验证凭证,发送的请求未得到满⾜。

402 Payment Required(要求付款)

响应结果:此响应码保留以便将来使⽤,创造此响应码的最初⽬的是⽤于数字⽀付系统,然⽽现在并未使⽤。