一些常见的 HTTP 状态码及其描述,这些状态码在后端开发中经常遇到。这些状态码分为几类:信息性状态码、成功状态码、重定向状态码、客户端错误状态码和服务器错误状态码。
信息性状态码 (1xx)
- 100 Continue:客户端应继续其请求。
- 101 Switching Protocols:服务器已理解客户端的请求,并将通过升级协议来进行处理。
成功状态码 (2xx)
- 200 OK:请求成功,响应体通常包含所请求的资源。
- 201 Created:请求成功并且服务器创建了一个新的资源。
- 202 Accepted:请求已被接受,但尚未处理完成。
- 204 No Content:请求成功,但响应体为空。
重定向状态码 (3xx)
- 301 Moved Permanently:请求的资源已被永久移动到新的 URI。
- 302 Found:请求的资源临时从不同的 URI 响应请求。
- 303 See Other:请求的资源可以通过 GET 方法从另一个 URI 获取。
- 304 Not Modified:资源未被修改,客户端可以使用缓存的版本。
- 307 Temporary Redirect:请求的资源临时从不同的 URI 响应请求,但请求方法不应改变。
- 308 Permanent Redirect:请求的资源已被永久移动到新的 URI,但请求方法不应改变。
客户端错误状态码 (4xx)
- 400 Bad Request:服务器无法理解请求的格式,通常是由于客户端错误。
- 401 Unauthorized:请求要求用户的身份认证。
- 403 Forbidden:服务器理解请求,但拒绝执行,通常是由于权限问题。
- 404 Not Found:请求的资源不存在。
- 405 Method Not Allowed:请求方法对请求的资源不适用。
- 406 Not Acceptable:服务器无法根据客户端请求的内容特性生成响应。
- 408 Request Timeout:服务器等待请求超时。
- 409 Conflict:请求冲突,通常是因为并发编辑。
- 410 Gone:请求的资源已不再可用,且服务器不知道应该返回哪个资源。
- 411 Length Required:服务器拒绝处理请求,因为请求缺少
Content-Length
头。 - 412 Precondition Failed:服务器拒绝处理请求,因为请求中的条件未能满足。
- 413 Payload Too Large:请求实体太大,服务器拒绝处理。
- 414 URI Too Long:请求的 URI 太长,服务器拒绝处理。
- 415 Unsupported Media Type:请求的媒体类型不受支持。
- 416 Range Not Satisfiable:请求的范围无法满足。
- 417 Expectation Failed:服务器无法满足
Expect
请求头的要求。 - 422 Unprocessable Entity:请求格式正确,但由于语义错误无法处理。
- 429 Too Many Requests:客户端发送的请求过多,被限流。
- 431 Request Header Fields Too Large:请求头字段过大。
- 451 Unavailable For Legal Reasons:请求的资源因法律原因不可用。
服务器错误状态码 (5xx)
- 500 Internal Server Error:服务器遇到意外情况,无法完成请求。
- 501 Not Implemented:服务器不支持请求的方法。
- 502 Bad Gateway:服务器作为网关或代理,从上游服务器收到了无效的响应。
- 503 Service Unavailable:服务器暂时无法处理请求,通常是由于过载或维护。
- 504 Gateway Timeout:服务器作为网关或代理,未能及时从上游服务器收到响应。
- 505 HTTP Version Not Supported:服务器不支持请求中使用的 HTTP 版本。
- 507 Insufficient Storage:服务器无法存储完成请求所必需的内容。
- 508 Loop Detected:服务器检测到无限循环。
- 511 Network Authentication Required:客户端需要进行网络认证。
自定义错误码
除了标准的 HTTP 状态码,一些应用还会使用自定义的错误码来提供更多细节。这些自定义错误码通常在响应体中以 JSON 格式返回,例如:
{"code": 1001,"message": "Invalid user credentials"
}
示例
假设你有一个 RESTful API,以下是一些常见的错误响应示例:
-
400 Bad Request:
{"code": 400,"message": "Invalid request format" }
-
401 Unauthorized:
{"code": 401,"message": "Authentication required" }
-
403 Forbidden:
{"code": 403,"message": "Access denied" }
-
404 Not Found:
{"code": 404,"message": "Resource not found" }
-
422 Unprocessable Entity:
{"code": 422,"message": "Validation failed","errors": {"email": ["Email is required"],"password": ["Password must be at least 6 characters"]} }
-
500 Internal Server Error:
{"code": 500,"message": "Internal server error" }