概要
当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。 当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP 状态码的信息头(server header)用以响应浏览器的请求。HTTP 状态码负责表示客户端 HTTP 请求的返回结果、标记服务器端 的处理是否正常、通知出现的错误等工作。 HTTP 状态码的英文为HTTP Status Code。
状态码的类别
状态码的细分解释
①1XX
1xx消息 这一类型的状态码,代表请求已被接受,需要继续处理。 这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束。 由于HTTP/1.0协议中没有定义任何1xx状态码,所以除非在某些试验条件下,服务器禁止向此类客户端发送1xx响应。
②2XX
2XX 的响应结果表明请求被正常处理了。
2.1.0 200 (OK) - 服务器已成功处理了请求
2.1.1 201(created) - 请求成功并且服务器创建了新的资源
201 Created 是一个代表成功的应答状态码,表示请求已经被成功处理,并且创建了新的资源。 新的资源在应答返回之前已经被创建。 同时新增的资源会在应答消息体中返回,其地址或者是原始请求的路径,或者是 Location 首部的值。 这个状态码的常规使用场景是作为 POST 请求的返回值。
2.1.2 202(accepted) - 服务器端已经收到请求消息,但是尚未进行处理
响应状态码 202 Accepted 表示服务器端已经收到请求消息,但是尚未进行处理。但是对于请求的处理却是无保证的,即稍后无法通过 HTTP 协议给客户端发送一个异步请求来告知其请求的处理结果。这个状态码被设计用来将请求交由另外一个进程或者服务器来进行处理,或者是对请求进行批处理的情形。
2.1.3 203(SC_NON_AUTHORITATIVE_INFORMATION) - 文档被正常的返回,但是由于正在使用的是文档副本所以某些响应头信息可能不正确
203非权威内容,简单的说,就是通过代理访问原始服务器的时候,成功获取了原始服务器(状态200)的返回内容,但是代理对内容做出了一些改动,例如修改了文档的编码等,代理通过这个状态码告知用户,成功获取内容,但是这部分内容和原始服务器返回的内容可能不完全一致
2.1.4 204(No Content) - 请求已经成功了,但是客户端客户不需要离开当前页面
无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档
2.1.5 205(Reset Content) - 重置内容
205与 204 无内容状态 code一样,响应状态码 205 Reset Content
用来通知客户端重置文档视图,比如清空表单内容、重置 canvas 状态或者刷新用户界面
2.1.6 206(Partial Content) - 在客户端表明自己只需要目标URL上的部分资源的时候返回的.
该状态码表示客户端进行了范围请求,而服务器成功执行了这部分的 GET 请求。响应报文中包含由 Content-Range 指定范围的实体内容。
2.1.7 207( Multi Status ) - 多状态
多状态 的207 多状态地位 code 提供 多个独立进程的状态 由WebDAV 服务器使用。 默认消息/响应是文本/XML 消息。 它表明 已执行多个操作,并且可以在resp 的正文中查看每个操作的状态onse.
2.1.8 208( Already Reported ) - 已报告地位
访问网页的浏览器永远不会遇到此状态代码。HTTP208 Already Reported
响应代码用在207
( 207 Multi-Status
) 响应中以节省空间并避免冲突。如果使用不同的路径多次请求同一资源(例如作为集合的一部分),则仅第一个资源报告状态为200,所有其他绑定的响应将使用此208
状态代码进行报告,因此不会产生冲突并且响应会保持较短。
③3XX
3XX 响应结果表明浏览器需要执行某些特殊的处理以正确处理请求。
3.1.0 300(Multiple Choices) - 请求拥有多种可能的响应
300 Multiple Choices
是一个用来表示重定向的响应状态码,表示该请求拥有多种可能的响应。用户代理或者用户自身应该从中选择一个。由于没有如何进行选择的标准方法,这个状态码极少使用。
3.1.1 301(Moved Permanently) - 资源已经被永久改变了位置
永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
像下方给出的请求 URI,当指定资源路径的最后忘记添加斜杠“/”,就 会产生 301 状态码。
3.1.2 302(Found) - 该资源原本确实存在,但已经被临时改变了位置
临时移动。但资源只是临时被移动。客户端应继续使用原有URI
3.1.3 303(See Other) - 表示重定向链接指向的不是新上传的资源,而是另外一个页面
,
HTTP 303 See Other 重定向状态码,通常作为 PUT 或 POST 操作的返回结果,它表示重定向链接指向的不是新上传的资源,而是另外一个页面,比如消息确认页面或上传进度页面。而请求重定向页面的方法要总是使用 GET。
3.1.4 304(Not Modified) - 服务端已经执行了GET,但文件未变化。
该状态码表示客户端发送附带条件的请求 2 时,服务器端允许请求访 问资源,但未满足条件的情况。304 状态码返回时,不包含任何响应 的主体部分。304 虽然被划分在 3XX 类别中,但是和重定向没有关 系。
3.1.5 305(Use Proxy) - 使用代理
使用代理。所请求的资源必须通过代理访问
3.1.6 306(Unused) - 不再被使用
已经被废弃的HTTP状态码,最初是指“后续请求应使用指定的代理”
3.1.7 307(Temporary Redirect) - 临时重定向
临时重定向。该状态码与 302 Found 有着相同的含义。尽管 302 标准禁止 POST 变换成 GET,但实际使用时大家并不遵守。307 会遵照浏览器标准,不会从 POST 变成 GET。但是,对于处理响 应时的行为,每种浏览器有可能出现不同的情况。
④4XX
4XX 的响应结果表明客户端是发生错误的原因所在
4.1.0 400(Bad Request) - 提示客户端发送了一个异常的请求
该状态码表示请求报文中存在语法错误。当错误发生时,需修改请求 的内容后再次发送请求。另外,浏览器会像 200 OK 一样对待该状态 码。
4.1.1 401(Unauthorized) - 客户端的请求要求用户的身份认证
该状态码表示发送的请求需要有通过 HTTP 认证(BASIC 认证、 DIGEST 认证)的认证信息。另外若之前已进行过 1 次请求,则表示 用 户认证失败。
返回含有 401 的响应必须包含一个适用于被请求资源的 WWWAuthenticate 首部用以质询(challenge)用户信息。当浏览器初次接收 到 401 响应,会弹出认证用的对话窗口。
4.1.2 402(Payment Required) - 客户端的请求要求用户的身份认证
被保留使用的非标准客户端错误状态响应码。有时,这个状态码表明直到客户端付费之后请求才会被处理。 402 状态码被创建最初目的是用于数字现金或微型支付系统,表明客户端请求的内容只有付费之后才能获取。 目前还不存在标准的使用约定,不同的实体可以在不同的环境下使用
4.1.3 403(Forbidden) - 服务器理解请求客户端的请求,但是拒绝执行此请求
该状态码表明对请求资源的访问被服务器拒绝了。服务器端没有必要 给出拒绝的详细理由,但如果想作说明的话,可以在实体的主体部分对原因进行描述,这样就能让用户看到了。
未获得文件系统的访问授权,访问权限出现某些问题(从未授权的发 送源 IP 地址试图访问)等列举的情况都可能是发生 403 的原因。
4.1.4 404(Not Found) - 服务器无法根据客户端的请求找到资源
该状态码表明服务器上无法找到请求的资源。除此之外,也可以在服 务器端拒绝请求且不想说明理由时使用。
4.1.5 405(Method Not Allowed) - 客户端请求中的方法被禁止
表明服务器禁止了使用当前HTTP 方法的请求。
4.1.6 406(Not Acceptable) - 服务器无法根据客户端请求的内容特性完成请求
表示客户端错误,指代服务器端无法提供与 Accept-Charset 以及 Accept-Language 消息头指定的值相匹配的响应。 主动内容协商标头包括: Accept. Accept-Encoding.
4.1.7 407(Proxy Authentication Required) - 请求要求代理的身份认证
与401类似,但请求者应当使用代理进行授权。指的是由于缺乏位于浏览器与可以访问所请求资源的服务器之间的代理
4.1.8 408(Request Time-out) - 服务器想要将没有在使用的连接关闭
服务器等待客户端发送的请求时间过长,超时。
一些服务器会在空闲连接上发送此信息,即便是在客户端没有发送任何请求的情况下。 服务器应该在此类响应中将 Connection 首部的值设置为"close",因为 408 意味着服务器已经决定将连接关闭,而不是继续等待。
4.1.9 409(Conflict) - 请求与服务器端目标资源的当前状态相冲突
冲突最有可能发生在对 PUT 请求的响应中。 例如,当上传文件的版本比服务器上已存在的要旧,从而导致版本冲突的时候,那么就有可能收到状态码为409 的响应。
4.2.0 410(Gone) - 被请求的资源在服务器上已经不再可用,而且没有任何已知的转发地址。
这样的状况应当被认为是永久性的。 如果可能,拥有链接编辑功能的客户端应当在获得用户许可后删除所有指向这个地址的引用。
4.2.1 411( Length Required) - 服务器无法处理客户端发送的不带Content-Length的请求信息
由于缺少确定的 Content-Length 首部字段,服务器拒绝客户端的请求。 注意,按照规范,当使用分块模式传输数据的时候, Content-Length 首部是不存在的,但是需要在每一个分块的开始添加该分块的长度,用十六进制数字表示。
4.2.2 412( Precondition Failed) - 客户端请求信息的先决条件错误
表示客户端错误,意味着对于目标资源的访问请求被拒绝。
4.2.3 413( Content Too Large) - 请求主体的大小超过了服务器愿意或有能力处理的限度
由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息
4.2.4 414(URI Too Longe) - 请求的URI过长,服务器无法处理
表示客户端所请求的URI 超过了服务器允许的范围。
4.2.5 415(Unsupported Media Type) - 服务器无法处理请求附带的格式
表示服务器由于不支持其有效载荷的格式,从而拒绝接受客户端的请求。 格式问题的出现有可能源于客户端在 Content-Type 或 Content-Encoding 首部中指定的格式,也可能源于直接对负载数据进行检测的结果。
4.2.6 416(Unsupported Media Type) - 服务器无法处理请求附带的格式
表示服务器由于不支持其有效载荷的格式,从而拒绝接受客户端的请求。 格式问题的出现有可能源于客户端在 Content-Type 或 Content-Encoding 首部中指定的格式,也可能源于直接对负载数据进行检测的结果。
4.2.7 417(Expectation Failed) - 服务器无法满足Expect的请求头信息
表示客户端错误,意味着服务器无法满足 Expect 请求消息头中的期望条件。
4.2.8 418(I'm a teapot
) - 服务器拒绝冲煮咖啡,因为它永远是一个茶壶
HTTP 418 I'm a teapot
客户端错误响应代码表示服务器拒绝冲泡咖啡,因为它是个茶壶。
该错误是超文本咖啡壶控制协议的参考,和 1998 年愚人节的玩笑。
⑤5XX
5XX 的响应结果表明服务器本身发生错误
5.1.0 500(Internal Server Error) - 服务器内部错误,无法完成请求
表示服务器端错误的响应状态码,意味着所请求的服务器遇到意外的情况并阻止其执行请求。 这个错误代码是一个通用的“万能”响应代码。 有时候,对于类似于500 这样的错误,服务器管理员会更加详细地记录相关的请求信息来防止以后同样错误的出现。
5.1.1 501( Not Implemented) - 服务器不支持请求的功能,无法完成请求
服务器错误响应码表示请求的方法不被服务器支持,因此无法被处理。 服务器必须支持的方法(即不会返回这个状态码的方法)只有 GET 和 HEAD 。 请注意,你无法修复501 错误,需要被访问的web 服务器去修复该问题。
5.1.2 502( Bad Gateway) - 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
网关在计算机网络体系中可以指代不同的设备,502 错误通常不是客户端能够修复的,而是需要由途经的Web 服务器或者代理服务器对其进行修复。
5.1.3 503( Service Unavailable) - 服务器尚未处于可以接受请求的状态
通常造成这种情况的原因是由于服务器停机维护或者已超载。 注意在发送该响应的时候,应该同时发送一个对用户友好的页面来解释问题发生的原因。
5.1.4 504( Gateway Timeout) - 充当网关或代理的服务器,未及时从远端服务器获取请求
Gateway(网关)在计算机网络体系中可以指代不同的设备,504 错误通常不是在客户端可以修复的,而是需要由途径的Web 服务器或者代理服务器对其进行修复。
5.1.5 505( HTTP Version not supported) - HTTP版本不受支持
服务器不支持请求的HTTP协议的版本,无法完成处理
5.1.6 506(Variant Also Negotiates) - 变体也协商
506变体也协商是一个实验性的 HTTP 状态代码,今天不是标准的一部分。 506 变体还协商指示服务器存在内部配置问题 由于内容协商问题。 内容协商允许客户端发送 多个接受标头,并告诉服务器资源的特定表示形式,如 浏览器。
5.1.7 507( Insufficient Storage) - 存储不足
507 码表示服务器不能存储相关内容。准确地说,一个方法可能没有被执行,因为服务器不能存储其表达形式,这里的表达形式指:方法所附带的数据,而且其请求必需已经发送成功。
5.1.8 508(Loop Detected) - 客户端对服务器的访问频率太高,服务器拒绝了客户端请求
这通常是为了保护网站免受过多的流量和数据负载的影响。 目前市面上,许多网站都会设置这样的限制,以保护它们的服务器和数据免受恶意爬虫或攻击的侵害。
5.1.9 509(Bandwidth Limit Exceeded) - 超出带宽限制 (非官方)
小结
提示:对于http这方面的知识,可以移步图解HTTP,有趣且通俗易懂(^-^)V
以上内容只是对http返回状态码一小部分的梳理,如有不对,欢迎指正