HTTP 状态码全解析
http 状态码是什么意思
HTTP 状态码(HTTP Status Code)是用以表示网页服务器超文本传输协议 响应状态 的3位数字代码。所有状态码的第一个数字代表了响应的五种状态之一。
http 状态码有什么用
http 状态码的核心作用是 Web Server
服务器用来告诉客户端,当前的网页请求发生了什么事,或者说当前 Web 服务器的响应状态。所以说 HTTP 状态码常用来判断和分析当前 Web 服务器的运行状态。
http 状态码的分类
HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的 类型,后两个数字没有分类的作用。一共分为 5 种类型:
分类 | 分类描述 |
---|---|
1** | 信息,服务器收到请求,需要请求者继续执行操作 |
2** | 成功,操作被成功接收并处理 |
3** | 重定向,需要进一步操作以完成请求 |
4** | 客户端错误,请求包含语法错误或无法完成请求 |
5** | 服务端错误,服务器在处理请求的过程中发生了错误 |
状态码 | 描述 |
---|---|
100 | (继续)请求者应当继续提出请求 |
200 | 英文名称为 OK,表示请求已成功,请求所希望的响应头或数据体将随此响应返回 |
203 | 服务器已成功处理了请求,但返回的实体头部元信息不是在原始服务器上有效的确定集合,而是来自本地或者第三方的拷贝 |
301 | 被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个URI之一 |
302 | 要求客户端执行临时重定向。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求 |
400 | 1. 语义有误,当前请求无法被服务器理解 2. 请求参数有误 |
401 | 当前请求需要用户验证 |
403 | 服务器已经理解请求,但是拒绝执行它 |
404 | 请求失败,请求所希望得到的资源未被在服务器上发现 |
500 | 服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在服务器端的源代码出现错误时出现 |
1** 状态码
100
100(继续)请求者应当继续提出请求。服务器返回此代码表示已收到请求的一部分,正在等待其余部分
101
101 表示切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议。例如,切换到 Http 的新版本协议。
2** 状态码
200
200
状态码英文名称为 OK
,表示请求已成功,请求所希望的响应头或数据体将随此响应返回。出现此状态码是表示正常状态,一般用于 GET
和 POST
请求
201
201 状态码英文名称是 Created
,该状态码表示已创建。成功请求并创建了新的资源,该请求已经被实现,而且有一个新的资源已经依据请求的需要而建立,且其 URI 已经随Location 头信息返回。假如需要的资源无法及时建立的话,应当返回 '202 Accepted'
202
服务器已接受请求,但尚未处理。正如它可能被拒绝一样,最终该请求可能会也可能不会被执行。在异步操作的场合下,没有比发送这个状态码更方便的做法了。
203
服务器已成功处理了请求,但返回的实体头部元信息不是在原始服务器上有效的确定集合,而是来自本地或者第三方的拷贝。当前的信息可能是原始版本的子集或者超集。例如,包含资源的元数据可能导致原始服务器知道元信息的超集。使用此状态码不是必须的,而且只有在响应不使用此状态码便会返回 200 OK的情况下才是合适的。
204
服务器成功处理了请求,但不需要返回任何实体内容,并且希望返回更新了的元信息。响应可能通过实体头部的形式,返回新的或更新后的元信息。如果存在这些头部信息,则应当与所请求的变量相呼应
205
服务器成功处理了请求,且没有返回任何内容。但是与 204 响应不同,返回此状态码的响应要求请求者重置文档视图。该响应主要是被用于接受用户输入后,立即重置表单,以便用户能够轻松地开始另一次输入。
与204响应一样,该响应也被禁止包含任何消息体,且以消息头后的第一个空行结束。
206
206 Partial Content表示该服务器已经成功处理了部分 GET 请求。类似于 FlashGet 或者迅雷这类的 Http下载工具都是使用此类响应实现断点续传或者将一个大文档分解为多个下载段同时下载。
该请求必须包含 Range 头信息来指示客户端希望得到的内容范围,并且可能包含 If-Range 来作为请求条件。
3** 状态码
300
Http 300 状态码表示多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择。
301
被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个URI之一。如果可能,拥有链接编辑功能的客户端应当自动把请求的地址修改为从服务器反馈回来的地址。除非额外指定,否则这个响应也是可缓存的。
302
要求客户端执行临时重定向(原始描述短语为“Moved Temporarily”)。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。只有在Cache-Control或Expires中进行了指定的情况下,这个响应才是可缓存的。
303
对应当前请求的响应可以在另一个 URI 上被找到,而且客户端应当采用 GET 的方式访问那个资源。这个方法的存在主要是为了允许由脚本激活的POST请求输出重定向到一个新的资源。这个新的 URI 不是原始资源的替代引用。同时,303响应禁止被缓存。当然,第二个请求(重定向)可能被缓存。
304
如果客户端发送了一个带条件的 GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个状态码。304响应禁止包含消息体,因此始终以消息头后的第一个空行结尾。
305
被请求的资源必须通过指定的代理才能被访问。Location 域中将给出指定的代理所在的 URI 信息,接收者需要重复发送一个单独的请求,通过这个代理才能访问相应资源。只有原始服务器才能建立305响应。
306
在最新版的规范中,306状态码已经不再被使用。
307
请求的资源临时从不同的URI 响应请求,临时重定向。与302类似。使用GET请求重定向。
4** 状态码
400
语义有误,当前请求无法被服务器理解。除非进行修改,否则客户端不应该重复提交这个请求。
请求参数有误。
401
当前请求需要用户验证。该响应必须包含一个适用于被请求资源的 WWW-Authenticate 信息头用以询问用户信息。客户端可以重复提交一个包含恰当的 Authorization 头信息的请求。如果当前请求已经包含了 Authorization 证书,那么401响应代表着服务器验证已经拒绝了那些证书。如果401响应包含了与前一个响应相同的身份验证询问,且浏览器已经至少尝试了一次验证,那么浏览器应当向用户展示响应中包含的实体信息,因为这个实体信息中可能包含了相关诊断信息。
402
该状态码是为了将来可能的需求而预留的。
403
服务器已经理解请求,但是拒绝执行它。与 401 响应不同的是,身份验证并不能提供任何帮助,而且这个请求也不应该被重复提交。如果这不是一个 HEAD 请求,而且服务器希望能够讲清楚为何请求不能被执行,那么就应该在实体内描述拒绝的原因。当然服务器也可以返回一个 404 响应,假如它不希望让客户端获得任何信息。
404
请求失败,请求所希望得到的资源未被在服务器上发现。没有信息能够告诉用户这个状况到底是暂时的还是永久的。假如服务器知道情况的话,应当使用 410 状态码来告知旧资源因为某些内部的配置机制问题,已经永久的不可用,而且没有任何可以跳转的地址。404这个状态码被广泛应用于当服务器不想揭示到底为何请求被拒绝或者没有其他适合的响应可用的情况下。出现这个错误的最有可能的原因是服务器端没有这个页面。
405
请求行中指定的请求方法不能被用于请求相应的资源。该响应必须返回一个Allow 头信息用以表示出当前资源能够接受的请求方法的列表。
鉴于 PUT,DELETE 方法会对服务器上的资源进行写操作,因而绝大部分的网页服务器都不支持或者在默认配置下不允许上述请求方法,对于此类请求均会返回405错误。
5** 状态码
500
服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在服务器端的源代码出现错误时出现。
501
服务器不支持当前请求所需要的某个功能。当服务器无法识别请求的方法,并且无法支持其对任何资源的请求。
解决 501 错误一般方法
这个错误在任何浏览器上都应是非常罕见的。 如果客户端不是一个浏览器则更有可能 – 特别是如果 Web 服务器很旧时。 在这两种情况下, 如果客户端指定了一个有效的请求类型, 那么Web 服务器不是响应不正确,就是需要升级。