HTTP状态码简要地描述了请求返回的状态。

在RFC中记录的HTTP状态码有60+,但是常用的只有十几个,下面对常用的进行一个总结。

状态码类别

在对具体的状态码进行描述前,先要对状态码类别有个了解。

状态码一共有5类,

  • 1XX:信息性状态码,表示接收到的请求正在处理
  • 2XX:成功状态码,表示请求成功处理完毕
  • 3XX:重定向状态码,表示客户端需要附加操作才能完成请求
  • 4XX:客户端错误状态码,表示客户端的请求无法被处理
  • 5XX:服务端错误状态码,表示服务端处理请求时出错

1XX

2XX

2XX类状态码表示请求被成功处理。

200 OK

请求被正常处理

204 No Content

请求被正常处理,但是响应报文实体不包含任何内容。

当接收到204状态码时,客户端不做任何更新。

这个状态码一般在只需要客户端向服务端发送信息,而客户端不需要新信息时使用。

206 Partial Content

服务端成功处理了客户端的范围请求,响应报文的实体内容是Content-Range指定范围的内容。

3XX

3XX类状态码表示客户端需要执行某些特殊的操作来正确地处理请求。

301 Moved Permanently

永久重定向。请求的资源已经被分配了新的URL,并且以后也使用这个新的URL访问。

新的URL通过响应的Location首都字段指定。

302 Found

临时重定向。请求的资源已经被分配了新的URL,本次使用新的URL访问。

303 See Other

临时重定向。请求的资源存在另一个URL,使用GET方法来定向获取该资源。

302功能相同,只是明确指定客户端应该使用GET方法获取资源。

304 Not Modified

客户端发送附带条件的请求时,服务端允许请求访问资源,但是因为没有满足条件,返回304(响应报文中不包含实体),表示资源没有改变,可以直接使用缓存。

附带条件的请求指,请求首部指定了If-MatchIf-Modified-SinceIf-None-MatchIf-RangeIf-Unmodified-Since中的任意一个。

304虽然被划分到3XX类下,但是和重定向没有关系。

307 Temporary Redirect

临时重定向。和302相同,只是307会严格按照浏览器标准,不会把POST方法改成GET方法。

301302标准是禁止把POST方法改成GET方法的,但是几乎所有的浏览器都会把POST方法改成GET方法,同时删除请求报文内的主体,然后自动发送请求。

4XX

4XX类状态码表示错误是客户端引起的。

400 Bad Request

请求报文中存在语法错误,需要修改请求内容后再次发送请求。

浏览器会像200一样对待400

401 Unauthorized

发送的请求需要通过HTTP认证,如果已经发送过一次认证请求,则表示认证失败。

服务器在返回401时,必须在响应中包含WWW-Authenticate首部字段用于质询用户信息。

403 Forbidden

请求被拒绝。服务器没有必要说明拒绝的详细理由,如果需要说明,则把原因作为响应的主体部分返回。

404 Not Found

请求的资源不存在。也可以用于在拒绝请求而不想说明原因时使用。

5XX

5XX类状态码表示服务器本身发生了错误。

500 Internal Server Error

服务端在执行请求时发生错误,也可能是服务端代码存在bug或临时的故障。

503 Service Unavailable

服务器处于超负荷或者正在进行停机维护,暂时无法处理请求。当明确知道可恢复服务时间时,最好添加Retry-After响应首部字段。