状态码在后端开发中常常遇到的场景
状态码分类概述
1xx状态码通常用于通信过程中的中间响应,表明服务器正在处理请求。
2xx状态码表示请求已成功被服务器接收、理解并接受。
3xx状态码用于重定向,通知客户端需要用不同的URI重新发送请求。
4xx状态码表示客户端错误,如请求语法错误、请求无效等。
5xx状态码表示服务器错误,服务器未能实现合法请求。
实际开发场景应用场景
1. 200 OK - 成功状态码
- 场景:客户端请求成功,服务器正常响应请求。
- Spring Cloud Gateway:在路由配置正确且下游服务正常时返回。
- Nginx:当请求的资源存在且客户端有权限访问时返回。
2. 301 Moved Permanently - 永久重定向
- 场景:请求的资源已被永久移动到新位置。
- Spring Cloud Gateway:使用
path
谓语和rewritePath
过滤器实现URL重写,返回301状态码。
3. 302 Found - 临时重定向
- 场景:请求的资源临时移动到另一个URI。
- Nginx:配置重定向规则,如
return 302
,实现URL临时跳转。
4. 401 Unauthorized - 未授权
- 场景:请求未通过身份验证。
- Spring Security:当用户未登录或令牌无效时,Spring Security返回401状态码。
5. 403 Forbidden - 禁止访问
- 场景:服务器理解请求但拒绝执行。
- Nginx:在权限控制中,如果用户没有访问权限,Nginx返回403状态码。
6. 404 Not Found - 未找到
- 场景:服务器无法找到请求的资源。
- 通用:任何服务器在未找到资源时都可能返回404,如Spring Boot应用或Nginx服务器。
7. 499 Client Closed Request - 客户端关闭连接
场景:在服务器还在处理请求时,客户端已经关闭了连接。
Nginx:当Nginx作为Web服务器正在处理请求,但客户端在响应发送前断开了连接,Nginx可能会记录499状态码。这种情况可能由网络问题、客户端程序错误或客户端机器故障引起。
8. 500 Internal Server Error - 服务器内部错误
- 场景:服务器遇到错误,无法完成请求。
- Spring Boot:当后端服务发生异常时,如果没有特定的异常处理器,将返回500状态码。
- Nginx:后端服务故障或Nginx配置错误时返回500。
9. 502 Bad Gateway - 错误的网关
- 场景:作为网关或代理的服务器从上游服务器收到无效响应。
- Nginx:在Nginx作为反向代理时,如果后端服务未正确响应,可能会返回502状态码。
10. 503 Service Unavailable - 服务不可用
- 场景:服务器暂时过载或维护,无法处理请求。
- Spring Cloud Gateway:结合Spring Cloud Circuit Breaker,当下游服务不可用时,可以配置返回503状态码。
11. 504 Gateway Timeout - 网关超时
- 场景:服务器作为网关或代理,但没有及时从上游服务器收到响应。
- Nginx:在Nginx配置的超时设置不当或后端服务响应过慢时,可能会返回504状态码。
其他状态码
- 413 Payload Too Large:请求体过大,服务器无法处理,如上传文件超过大小限制。
- 429 Too Many Requests:请求过多,服务器拒绝处理,通常用于限流。
以下是将上述状态码及其在后端开发中常见场景的描述汇总成表格的形式:
HTTP状态码 | 描述 | Spring Cloud Gateway应用示例 | Nginx应用示例 |
---|---|---|---|
200 | OK,请求成功处理。 | 路由配置正确且下游服务正常时返回。 | 请求的资源存在且客户端有权限访问时返回。 |
301 | Moved Permanently,永久重定向。 | 使用path 谓语和rewritePath 过滤器实现URL重写。 | - |
302 | Found,临时重定向。 | - | 配置重定向规则,如return 302 。 |
401 | Unauthorized,未授权。 | 当用户未登录或令牌无效时返回。 | - |
403 | Forbidden,禁止访问。 | - | 在权限控制中,如果用户没有访问权限返回。 |
404 | Not Found,未找到。 | - | 服务器无法找到请求的资源时返回。 |
500 | Internal Server Error,服务器内部错误。 | 当后端服务发生异常且无特定异常处理器时返回。 | 后端服务故障或配置错误时返回。 |
502 | Bad Gateway,错误的网关。 | - | Nginx作为反向代理时,如果后端服务未正确响应,可能会返回。 |
503 | Service Unavailable,服务不可用。 | 结合Spring Cloud Circuit Breaker,当下游服务不可用时返回。 | 服务器暂时过载或维护时返回。 |
504 | Gateway Timeout,网关超时。 | - | Nginx作为网关或代理,未及时从上游服务器收到响应时返回。 |
413 | Payload Too Large,请求体过大。 | 上传文件超过大小限制时返回。 | - |
429 | Too Many Requests,请求过多。 | 触发限流机制时返回。 | - |
499 | Client Closed Request,客户端关闭连接(非官方状态码)。 | - | 客户端在服务器响应前主动断开连接时记录。 |