Skip to main content

HTTP响应状态码

目前 HTTP 在 Web 开发中被广泛使用,在 Web 开发中不同的 HTTP 响应状态码往往有不同的含义。在普通网站开发、分布式集群开发、团队协作方面,如果采用了 HTTP 作为组件之间交互的协议,遵守通用的响应状态码是很有必要的(一是有充分的信息量、二是避免歧义)。

响应状态码分类

HTTP 响应状态共有 5 大类,分别是数字 1、2、3、4、5 开头。

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

常见的具体状态码

大分类状态码含义
1XX100 Continue说明收到了请求的初始部分,请客户端继续。发送了这个状态码之后,服务器必须在请求完成后发送一个最终的响应
101 Switching Protocols说明服务器正在根据客户端的指定,将协议切换成 Update 首部所列的协议
2XX200 OK分三种,有两种是强缓存
201 Created请求成功,并创建了一个新的资源,响应的实体主体部分中应该包含各种引用了已创建的资源的 URL,Location 首部包含的则是最具体的引用。(REST 里面,POST 或者 PUT 常常返回这样的状态)
202 Accepted请求已经接收到,但还未响应,没有结果。这只是意味着接受请求时,它看起来是有效的
204 No Content请求成功,没有内容返回。通常在更新服务器上资源的时候成功的情况下不要求返回实体内容就会产生这个状态码
206 Partial Content请求成功,返回部分内容。往往表示成功执行了一个部分或 Range 请求
3XX301 Moved Permanently永久重定向,表示请求的资源被分配了新的 URI,以后应使用资源现在所指的 URI
302 Found临时重定向,表示请求的资源被分配了新的 URI,希望用户本次使用新的 URI 访问
303 See Other表示请求对应的资源存在这另一个 URI,应使用 GET 方法定向获取请求的资源
304 Not Modified表示命中“协商缓存”,客户端所请求的资源并没有被修改,可以直接使用浏览器中的缓存。
305 Use Proxy用来说明必须通过一个代理来访问资源;代理的位置由 Location 首部给出。很重要的一点是,客户端是相对某个特定资源来解析这条响应的,不能假定所有请求,甚至所有对持有所请求资源的服务器的请求都通过这个代理进行。如果客户端错误地让代理介入了某条请求,可能会引发破坏性的行为,而且会造成安全漏洞
307 Temporary Redirect
308 Permanent Redirect
4XX400 Bad Request请求存在错误
401 Unauthorized表示认证错误,它是为了认证设计的,而不是为了授权设计的。收到 401 响应,表示请求没有被认证或者认证不正确,请重新认证。(一般在响应头部包含一个 WWW-Authenticate 来描述如何认证)
403 Forbidden表示没有授权,表示当用户被认证后,但用户没有被授权在特定资源上执行操作,它比 401 更具体。
404 Not Found服务器无法找到请求的 URL 所对应的资源
405 Method Not Allowed指定的请求方法不能被用于请求相应的资源,应该在响应中包含 Allow 首部,以告知客户端对所请求的资源可以使用哪些方法
406 Not Acceptable资源无法满足客户端请求的条件,例如请求中文但只有英文;
413 Request Entity Too Large客户端发送的实体主体部分比服务器能够或者希望处理的要大时,返回此状态码
416 Range Not SatisfiableMeans Range in reqest header is not satisfiable
429 Too Many Requests客户端在给定时间范围内发送了太多请求
5XX500 Internal Server Error服务器执行请求出错
501 Not Implemented请求的方法不被服务器支持,因此无法被处理。服务器必须支持的方法(即不会返回这个状态码的方法)只有 GET 和 HEAD
502 Bad Gateway网关错误,通常是服务器作为网关或者代理时返回的错误码,表示服务器自身工作正常,访问后端服务器时发生了错误,但具体的错误原因也是不知道的。
503 Service Unavailable服务器暂时处于超负载或者正在停机维护,如果事先得知解除以上状况所需时间,最好写入 Retry-After 首部字段返回给客户端

参考资料

HTTP 响应代码 -- MDN