在 Swift 开发中,你通常通过 URLRequest 的 allHTTPHeaderFields 属性来观察或设置这些头部。它们就像是请求的“元数据”,定义了传输的规则和身份。
以下是 5 个最常用的 HTTP 请求头及其用途:
1. Content-Type (内容类型)
-
用途:告诉服务器请求体(Body)中数据的媒体类型。
-
常见值:
application/json: 发送 JSON 数据(Swift 中最常用)。multipart/form-data: 用于上传文件。application/x-www-form-urlencoded: 传统的表单提交。
-
Swift 场景:如果你不设置这个头,很多后端框架(如 Spring, Gin)可能无法正确解析你通过
httpBody发送的 JSON。
2. Authorization (身份验证)
-
用途:用于携带证明客户端身份的凭证(如 Token)。
-
常见值:
Bearer <Your_Token>。 -
Swift 场景:在登录成功后,你会将获取到的 JWT(JSON Web Token)保存。之后的每个请求都需要在 Header 中加入此字段,否则服务器会返回
401 Unauthorized。Swift
request.setValue("Bearer (myToken)", forHTTPHeaderField: "Authorization")
3. User-Agent (用户代理)
- 用途:标识发起请求的客户端软件信息(操作系统、应用版本等)。
- 常见值:
MyApp/1.0 (iPhone; iOS 17.0; Scale/3.0)。 - Swift 场景:后端可以根据这个字段进行统计,或者针对不同版本的 App 返回不同的内容。默认情况下,
URLSession会生成一个标准的 User-Agent,但开发者通常会自定义它以便于日志分析。
4. Accept (接受类型)
- 用途:告诉服务器客户端能够处理的内容类型(即客户端想接收什么样的数据)。
- 常见值:
application/json,text/html,*/*。 - Swift 场景:如果你的 API 同时支持返回 XML 和 JSON,通过设置
Accept: application/json,可以确保服务器返回你想要的数据格式。
5. Cache-Control (缓存控制)
-
用途:指定请求和响应遵循的缓存机制。
-
常见值:
no-cache: 强制要求服务器验证。max-age=3600: 告知客户端该资源在 3600 秒内是新鲜的。
-
Swift 场景:当你需要确保获取的是最新数据(例如余额查询)而非缓存数据时,可以在请求头中加入
no-cache。
总结对照表
| 请求头 | 核心作用 | 开发关注点 |
|---|---|---|
| Content-Type | 声明 发出去 的是什么 | 格式不对会导致服务器 400 错误 |
| Accept | 声明 想收回 的是什么 | 决定了响应内容的协商 |
| Authorization | 证明 我是谁 | 涉及安全,通常配合 HTTPS 使用 |
| User-Agent | 声明 我在哪 | 用于埋点统计和兼容性判断 |
| Host | 声明 去哪里 | 区分同一 IP 下的不同虚拟主机 |