HTTP协议--状态码
HTTP 状态码是服务器对客户端请求的响应结果的标准化标识,由三位数字组成。它们分为五类,每类有特定的语义。以下是详细的分类和常见状态码的讲解:
1xx(信息响应)
表示请求已被接收,需要继续处理。
常见状态码:
• 100 Continue
• 场景:客户端发送大文件前,服务器确认是否接受请求(需配合 Expect: 100-continue 请求头)。 • 示例:上传大文件时,客户端先发送请求头,服务器返回 100 Continue 后再发送文件体。
• 101 Switching Protocols
• 场景:服务器同意客户端请求,切换协议(如从 HTTP 升级到 WebSocket)。 • 示例:Upgrade: websocket 请求头触发协议切换。
2xx(成功响应)
表示请求已成功被服务器接收、理解并处理。
常见状态码:
• 200 OK
• 场景:标准成功响应,请求已成功完成。 • 示例:访问网页时返回 HTML 内容。
• 201 Created
• 场景:资源创建成功(如通过 POST 创建新用户)。 • 示例:RESTful API 中创建资源后返回 201 和新资源的 URL(Location 头)。
• 202 Accepted
• 场景:请求已接收,但尚未处理完成(适用于异步任务)。 • 示例:提交订单后,服务器返回 202 并异步处理支付。
• 204 No Content
• 场景:请求成功,但无返回内容(如删除资源成功)。 • 示例:DELETE 请求删除用户后返回 204。
• 206 Partial Content
• 场景:分片下载或断点续传时返回部分内容。 • 示例:视频播放器通过 Range 头请求部分数据,服务器返回 206。
3xx(重定向响应)
表示需要客户端进一步操作以完成请求。
常见状态码:
• 301 Moved Permanently
• 场景:资源已永久移动到新 URL(浏览器会缓存新地址)。 • 示例:网站域名更换后,旧域名返回 301 指向新地址。
• 302 Found
• 场景:资源临时移动到新 URL(浏览器不会缓存,下次仍访问原地址)。 • 示例:未登录用户访问受限页面,临时重定向到登录页。
• 304 Not Modified
• 场景:协商缓存生效,资源未修改,客户端使用本地缓存。 • 示例:带 If-Modified-Since 头的请求,服务器返回 304。
• 307 Temporary Redirect
• 场景:与 302 类似,但要求客户端保持请求方法不变(如 POST 请求重定向后仍用 POST)。 • 示例:表单提交后临时重定向到结果页。
• 308 Permanent Redirect
• 场景:与 301 类似,但要求客户端保持请求方法不变。 • 示例:API 端点永久迁移时使用 308。
4xx(客户端错误)
表示客户端请求有误,服务器无法处理。
常见状态码:
• 400 Bad Request
• 场景:请求语法或参数错误(如 JSON 格式错误)。 • 示例:API 请求体缺少必填字段。
• 401 Unauthorized
• 场景:需要身份验证(未提供有效凭证)。 • 示例:访问需要登录的页面时返回 401,并附带 WWW-Authenticate 头。
• 403 Forbidden
• 场景:服务器拒绝请求(身份已验证,但权限不足)。 • 示例:普通用户尝试访问管理员页面。
• 404 Not Found
• 场景:资源不存在(URL 错误或资源已被删除)。 • 示例:访问不存在的网页路径。
• 405 Method Not Allowed
• 场景:请求方法不被允许(如对只支持 GET 的接口发送 POST)。 • 示例:向只允许 GET 的 API 端点发送 DELETE 请求。
• 409 Conflict
• 场景:请求与服务器当前状态冲突(如重复创建资源)。 • 示例:注册用户时用户名已存在。
• 429 Too Many Requests
• 场景:客户端请求频率过高(限流)。 • 示例:API 接口触发速率限制后返回 429。
5xx(服务器错误)
表示服务器处理请求时发生错误。
常见状态码:
• 500 Internal Server Error
• 场景:服务器内部错误(如代码抛出未捕获的异常)。 • 示例:数据库连接失败导致请求处理中断。
• 501 Not Implemented
• 场景:服务器不支持请求的功能(如未实现的 HTTP 方法)。 • 示例:客户端请求 WebDAV 方法,但服务器未实现。
• 502 Bad Gateway
• 场景:代理服务器从上游服务器收到无效响应。 • 示例:反向代理(如 Nginx)连接后端服务超时。
• 503 Service Unavailable
• 场景:服务器暂时不可用(如维护或过载)。 • 示例:电商大促时服务器返回 503 并提示稍后重试。
• 504 Gateway Timeout
• 场景:代理服务器等待上游服务器响应超时。 • 示例:API 网关调用微服务超时后返回 504。
特殊状态码
• 418 I’m a teapot
• 场景:幽默响应,源自 HTTP 愚人节玩笑(RFC 2324)。 • 示例:向支持此状态码的服务器发送煮咖啡请求。
总结
- 状态码分类:
1xx:信息响应,需继续操作。2xx:成功响应,请求已处理。3xx:重定向,需客户端跟进。4xx:客户端错误,请求不合法。5xx:服务器错误,服务端故障。