15-11.【HTTP】HTTP 状态码常用分组及含义(1xx~5xx)?

5 阅读2分钟

在 HTTP 协议中,状态码(Status Codes) 是服务器向客户端(你的 iOS App)发送的“三位数字信号”,用于告知请求的处理结果。

它们被分为五大类,每一类代表一种不同的响应性质:


1. 1xx:信息性状态码 (Informational)

含义:接收的请求正在处理。这类状态码在移动端开发中极少直接处理。

  • 101 Switching Protocols:切换协议。常用于 WebSocket 连接,表示从 HTTP 升级到双向通信协议。

2. 2xx:成功状态码 (Success)

含义:请求已成功被服务器接收、理解并接受。

  • 200 OK:最常见的成功状态。请求的数据在响应体中。
  • 201 Created:请求成功且服务器创建了新资源(常用于 POST 成功后)。
  • 204 No Content:请求成功,但响应报文不包含实体主体(常用于 DELETE 成功后)。

3. 3xx:重定向状态码 (Redirection)

含义:需要客户端采取进一步的操作才能完成请求。

  • 301 Moved Permanently:永久重定向。旧 URL 已废弃,App 应该更新书签/链接。
  • 302 Found:临时重定向。资源临时移动到了新位置。
  • 304 Not Modified非常重要。表示资源未改变,App 可以直接使用本地缓存,无需重新下载,节省流量和电量。

4. 4xx:客户端错误状态码 (Client Error)

含义:App 发送的请求有问题,服务器无法处理。

  • 400 Bad Request:语义错误。通常是参数格式不对(如 JSON 拼写错误)。
  • 401 Unauthorized未授权。需要身份验证(通常是 Token 缺失或过期)。
  • 403 Forbidden拒绝访问。你有身份,但没有权限看这个资源。
  • 404 Not Found:找不到资源。URL 写错了,或者资源已被删除。
  • 405 Method Not Allowed:方法禁用。比如该接口只支持 POST,你却用了 GET

5. 5xx:服务器错误状态码 (Server Error)

含义:服务器在处理请求的过程中出现了错误。

  • 500 Internal Server Error:服务器内部故障。通常是后端代码崩溃(如空指针异常)。
  • 502 Bad Gateway:网关错误。通常是 Nginx 找不到后端的 PHP/Java 服务了。
  • 503 Service Unavailable:服务不可用。服务器超载或正在维护。
  • 504 Gateway Timeout:网关超时。后端处理太慢,导致前端代理断开了连接。

在 Swift 中的处理建议

在 iOS 开发中,你应该根据状态码的分组来编写逻辑,而不仅仅是判断 error == nil

Swift

if let httpResponse = response as? HTTPURLResponse {
    switch httpResponse.statusCode {
    case 200...299:
        print("请求成功,开始解析数据")
    case 401:
        print("Token 过期,跳转到登录页")
    case 404:
        print("资源不存在,显示空页面")
    case 500...599:
        print("服务器炸了,稍后再试")
    default:
        print("其他错误: (httpResponse.statusCode)")
    }
}