在 《认识 HTTP 报文》一中,介绍相应报文首部中都包含了相应的状态码。那么,这个响应状态码究竟是做什么的呢?今天就来介绍一下 HTTP 中的状态码。
状态码的作用或者说是职责就是当客户端向服务器端发送请求时,描述返回请求的结果。通过状态码,用户可以知道服务器是否正常处理了请求。状态码如 200 OK,以 3 位数字和原因短语组成。例如:
# 状态行
HTTP/1.1 200 OK
状态码的类别
数字中的第一位制定了响应类别,后两位则无分类。状态码的类别有 5 种:
- 1XX – 信息性状态码(Informational):接收的请求正在处理;
- 2XX – 成功状态码(Success):请求正常处理完毕;
- 3XX – 重定向状态码(Redirection):需要进行附加操作已完成请求;
- 4XX – 客户端错误状态码(Client Error):服务器无法处理请求;
- 5XX – 服务器错误状态码(Server Error):服务器处理请求出错;
另外,只要遵循状态码类别的定义,即使改变标准(RFC2616)中定义的状态码或在服务器端自定义创建状态码都是允许的。而这些类别的状态码中,经常被使用的到的大概只有 14 种,接下来就来介绍一下这 14 种状态码。
2XX 成功
2XX 的响应状态码表示请求被正常处理了。常见的 2XX 类别的状态码有以下 3 种:
- 200 OK:表示从客户端发出的请求被服务器端正常处理了;
- 204 No Content:表示服务器接收的请求已被成功处理,但返回的响应报文不含有实体的主体部分;
- 206 Partial Content:表示客户端进行了返回请求,而服务器成功执行了这部分的 GET 请求;
3XX 重定向
3XX 的响应状态码表示浏览器需要执行某些特殊的处理以正确理解请求。常见的 3XX 类别的状态码有以下 5 种:
- 301 Moved Permanently:永久性重定向。表示资源已被分配了新的 URI,以后一直使用现在新的 URI 访问;
- 302 Found:临时性重定向。表示请求的资源已被分配到新的 URI,希望本次请求能使用新的 URI 访问;
- 303 See Other:表示由于请求对于资源存在于另外一个 URL。需要使用 GET 方法定向获取请求的资源;
- 304 Not Modified:表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但响应头部信息中不包含主体部分。304 虽然隶属与 3XX 类别,但实际没有进行任何重定向;
- 307 Tempoary Redirect:临时重定向。该状态码与 302 有着相同的含义;
4XX 客户端错误
4XX 的响应状态码表示客户端是发生错误的地方。常见的 4XX 类别的状态码有以下 4 种:
- 400 Bad Request:表示请求报文中存在语法错误。需要修改请求的内容后再次发送请求,并且浏览器一般会项处理 200 OK 状态码一样处理;
- 401 Unauthorized:表示发送的请求需要通过 HTTP 认证信息。一般都是无法通过授权认证或者认证过期引发的;
- 403 Forbidden:表示对请求资源的访问被服务器拒绝了。一般都是未获取文件系统的访问授权导致的;
- 404 Not Found:表明服务器上无法找到请求的资源。也可以在服务器拒绝请求但不想说明理由时使用 404 状态码;
5XX 服务器错误
5XX 的响应状态码表示服务器本身发生错误。常见的 5XX 类别的状态码有以下 2 种:
- 500 Internal Server Error:表示服务器在执行请求时发生了错误。
- 503 Service Unavailable:表示服务器暂时处于超负载或正在系统维护中,无法处理请求;
HTTP 中常见的状态码到此就介绍完了。希望读完本文,能够对 HTTP 中常见的状态码以及其含义有一个清晰的认识。