《图解HTTP》读书笔记 - 第4章 返回结果的 HTTP 状态码

状态码如 200 OK,以 3 位数字和原因短语组成。 数字中的第一位指定了响应类别,后两位数字无分类。响应类别有以下 5 种:

类别

原因短语

1XX

Infomational (信息性状态码)

接收的请求正在处理

2XX

Success (成功状态码)

请求正常处理完毕

3XX

Redirection (重定向状态码)

需要进行附加操作以完成请求

4XX

Client Error(客户端错误状态码)

服务器无法处理请求

5XX

Server Error(服务器错误状态码)

服务器处理请求出错

最常用且最具代表性的 14 个状态码如下:

2XX 成功

  • 200 OK
  • 204 No Content
  • 206 Partial Content

200 表示从客户端发来的请求在服务器端被正常处理了。 204 一般在不需要对客户端发送新内容的情况下使用。表明服务器接受的请求已经成功处理,但返回的响应报文中不含实体的主体部分; 206 表示服务器成功执行了客户端发来的范围请求。响应报文中包含指定范围的实体内容。

3XX 重定向

  • 301 Moved Permanently
  • 302 Found
  • 303 See Other
  • 304 Not Modified
  • 307 Temporary Redirect

301 表示资源已经分配了新的 URI,以后都应该使用新的 URI。 302 表示资源已经分配了新的 URI,仅仅这次用新的 URI 访问。 303 和 302 一样,只是要求必须用 GET 方法访问新的 URI。 304 和重定向没有关系,也不返回实体,只是表明没有满足请求的附带条件。常见于浏览器判断缓存是否过期。 307 和 302 一样。302 标准禁止 POST 变成 GET,实际大家并不遵守。307 会遵守这个标准,但处理时每种浏览器的行为有所不同。

4XX 客户端错误

  • 400 Bad Request
  • 401 Unauthorized
  • 403 Forbidden
  • 404 Not Found

400 表示请求报文中有语法错误。 401 表示请求需要通过 HTTP 认证。若之前已经进行过一次请求,则表示用户认证失败。 403 表示请求的资源访问被服务器拒绝了。服务器不一定会给出拒绝的详细理由。 404 表示请求的资源不存在。也可以在服务器拒绝请求但不想说明理由的时候使用。

5XX 服务器错误

  • 500 Internal Server Error
  • 503 Service Unavailable

500 表示服务器在执行请求过程中发生了错误。 503 表示服务器暂时处于超负荷或者停机维护,暂时无法处理请求。

状态码和状况的不一致

有时候,不少返回的状态码响应都是错误的,但用户可能察觉不到这点。比如 Web 应用程序内部发生错误,状态码依然返回 200 OK,这种情况也经常遇到。

改变状态码

只要遵守状态码类别的定义,即使改变 RFC2616 中定义的状态码,或服务器自行创建状态码都没有问题。