在 《认识 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 中常见的状态码以及其含义有一个清晰的认识。

分类: Blog