http状态码
http状态码是描述返回的请求结果,由3位数字和原因短语组成。
类别
| 状态码 | 类别 | 原因短语 |
| :---- | :--- |
| 1XX | 信息性状态码 | 接收的请求正在处理 |
| 2XX | 成功状态码 | 请求正常处理 |
| 3XX | 重定向状态码 | 需要进行附加操作以完成操作 |
| 4XX | 客户端错误状态码 | 服务器无法处理请求 |
| 5XX | 服务器错误状态码 | 服务器处理请求出错 |
说明
2XX
200 OK
成功返回请求。
- GET 返回请求资源的实体内容。
- HEAD 只返回响应首部,不返回实体主体。
201 Created
请求资源被正确创建。
✅ POST一个新用户可以返回201。
202 Accepted
服务器接受请求但尚未处理。这个状态下仅表示请求已经收到。
✅ 请求一个大量计算的结果,在没有计算结束时,可以返回202,适用于客户端轮询请求。
203 Non-Authoritative Information(自HTTP / 1.1起)
服务器是一个转换代理服务器,以200 OK状态码为起源, 但回应了原始响应的修改版本。
✅ 网游加速器
204 No Content
服务器成功处理了请求,返回任何内容。
✅ 删除一个文件或一个用户可以返回204。
205 Reset Content
服务器成功处理了请求,没有返回内容。与204响应不同,此响应要求重置文档视图。
✅ 请求删除了一条列表项,服务器返回205,就需要重新刷新列表。
206 Partial Content
服务器成功处理了部分范围的请求,响应报文中包含由Content-Range指定范围的实体内容。
✅ 类似于FlashGet或者迅雷这类的HTTP下载工具都是使用此类响应实现断点续传或者将一个大文档分解为多个下载段同时下载。
3XX
- 这类状态码代表需要客户端采取进一步的操作才能完成请求
- 通常,这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的Location域中指明。
300 Multiple Choices
请求成功,返回结果有多种选择。
✅ 下载一部片,服务器有 avi、mp4 等格式, 这时候可以返回 300,并在 body 里告知有哪些格式,然后用户根据这些格式再次请求。
301 Moved Permanently
永久性重定向。请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个URI之一。
✅ 下载一部单机,但是旧服务商倒闭了,提示你使用新服务商提供的地址去下载,这时可以返回301,并在header的Location中指明新的地址,告知用户都应当去这个地址下载。
302 Found
临时性重定向。请求资源被临时分配了新的URI,用户(本次)能使用新的URI访问。
新的URI地址应在响应实体中返回(HEAD请求除外)。
303 See Other
请求的资源存在另一个URI,应使用GET重定向获取资源。(明确表示客户端应采用GET获取资源)
当301、302、303响应状态码返回时,几乎所有浏览器都会把POST改为GET,并删除请求报文内的主体,之后请求再次自动发送。
即使301、302标准禁止将POST改为GET,但是实际使用大家都会这么做。
304 Not Modified
服务器资源未被修改。客户端可以下载未过期的缓存副本,不需要重新传输资源。
305 Use Proxy
请求的资源必须通过指定的代理才能被访问。
✅ 请求服务器A的数据,必须通过代理服务器B才能访问,如果直接访问服务器A,可以返回305。
307 Temporary Redirect
临时重定向,不同于302,它遵循标准,不会将POST改为GET,即当重新发出原始请求时,不允许更改请求方法。
✅ 使用另一个POST请求来重复POST请求,而不能使用GET请求来代替POST请求。
4XX - 客户端错误
400 Bad Request
请求报文存在错误,如: 错误的请求语法、无效的请求内容等。
401 Unauthorized
请求需要用户验证(token)。
402 Payment Required
为将来可能的需求预留的状态码。
该状态码最初的意图可能被用作某种形式的数字现金或在线支付方案的一部分,但几乎没有哪家服务商使用。
403 Forbidden
请求被服务器拒绝执行请求,一般可用于访问授权、访问权限。
404 Not Found
请求的资源不存在。
405 Method Not Allowed
请求行中指定的请求方法不能被用于请求相应的资源。
✅ 服务器只实现了 PATCH 了局部更新资源,并没有实现 PUT 来替换资源,如果这时候使用PUT请求可以返回405。
406 Not Acceptable
请求的资源不符合请求头的条件。
✅ header请求JSON格式的数据,服务端返回XML的数据,可以返回405。
407 Proxy Authentication Required
需在代理服务器上进行身份验证。
408 Request Timeout
请求超时。
✅ 发起一个请求,由于网络不好,服务器没有在指定时间内返回对应的信息,可以返回408。
409 Conflict
请求存在冲突无法处理该请求。
✅ 服务器已经有一个叫admin的用户,此时提交创建一个admin的用户,可以返回409。
410 Gone
请求的资源不再可用。
当资源被有意地删除并且资源应被清除时,应该使用这个,但大多数服务端不会使用此状态码,而是直接使用404状态码。
411 Length Required
服务器拒绝接收没有定义Content-Length头的请求。
412 Precondition Failed
请求资源不符合请求头中的 IF-* 的某些条件。
413 Request Entity Too Large
请求提交的实体数据大小超过了服务器能够处理的范围。
✅ 服务器要求上传文件不能超过10M,但提交了30M的文件,可以返回413。
414 Request-URI Too Long
请求的URI长度超过了服务器能够解释的长度。
415 Unsupported Media Type
不支持的媒体类型。
✅ 上传了一张GIF动图,但是服务器只支持PNG图片,可以返回415。
416 Requested Range Not Satisfiable
请求的范围无效。
417 Expectation Failed
请求头Expect中指定的预期内容无法被服务器满足。
418 I'm a teapot
一个彩蛋。
421 Misdirected Request
针对无法产生响应的服务器(如:连接重用)。
422 Unprocessable Entity
请求格式正确,但是由于含有语义错误,无法响应。
423 Locked
当前资源被锁定。
5XX - 服务器错误
500 Internal Server Error
服务器在执行请求时发生未知错误。
501 Not Implemented
服务器不支持当前请求所需要的某个功能。
502 Bad Gateway
网关错误。
503 Service Unavailable
服务器处于超负荷或停机维护,无法处理请求。
504 Gateway Timeout
网关超时。
505 HTTP Version Not Supported
服务器不支持,或者拒绝支持在请求中使用的HTTP版本。
参考资料
- 维基百科-http状态码
- 知乎-http状态码的定义