HTTP响应状态码
目前 HTTP 在 Web 开发中被广泛使用,在 Web 开发中不同的 HTTP 响应状态码往往有不同的含义。在普通网站开发、分布式集群开发、团队协作方面,如果采用了 HTTP 作为组件之间交互的协议,遵守通用的响应状态码是很有必要的(一是有充分的信息量、二是避免歧义)。
响应状态码分类
HTTP 响应状态共有 5 大类,分别是数字 1、2、3、4、5 开头。
- 1XX:信息性状态码,表示接收的请求正在处理。
- 2XX:成功状态码,表示请求正常处理完毕。
- 3XX:重定向状态码,表示需要进行附加操作以完成请求。
- 4XX:客户端错误状态码,表示服务器无法处理请求。
- 5XX:服务器错误状态码,表示服务器处理请求出错。
常见的具体状态码
大分类 | 状态码 | 含义 |
---|---|---|
1XX | 100 Continue | 说明收到了请求的初始部分,请客户端继续。发送了这个状态码之后,服务器必须在请求完成后发送一个最终的响应 |
101 Switching Protocols | 说明服务器正在根据客户端的指定,将协议切换成 Update 首部所列的协议 | |
2XX | 200 OK | 分三种,有两种是强缓存 |
201 Created | 请求成功,并创建了一个新的资源,响应的实体主体部分中应该包含各种引用了已创建的资源的 URL,Location 首部包含的则是最具体的引用。(REST 里面,POST 或者 PUT 常常返回这样的状态) | |
202 Accepted | 请求已经接收到,但还未响应,没有结果。这只是意味着接受请求时,它看起来是有效的 | |
204 No Content | 请求成功,没有内容返回。通常在更新服务器上资源的时候成功的情况下不要求返回实体内容就会产生这个状态码 | |
206 Partial Content | 请求成功,返回部分内容。往往表示成功执行了一个部分或 Range 请求 | |
3XX | 301 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 | ||
4XX | 400 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 Satisfiable | Means Range in reqest header is not satisfiable | |
429 Too Many Requests | 客户端在给定时间范围内发送了太多请求 | |
5XX | 500 Internal Server Error | 服务器执行请求出错 |
501 Not Implemented | 请求的方法不被服务器支持,因此无法被处理。服务器必须支持的方法(即不会返回这个状态码的方法)只有 GET 和 HEAD | |
502 Bad Gateway | 网关错误,通常是服务器作为网关或者代理时返回的错误码,表示服务器自身工作正常,访问后端服务器时发生了错误,但具体的错误原因也是不知道的。 | |
503 Service Unavailable | 服务器暂时处于超负载或者正在停机维护,如果事先得知解除以上状况所需时间,最好写入 Retry-After 首部字段返回给客户端 |