前言
如果说“请求报文”是客户端提出的要求,那么 “响应报文” 就是服务器给出的答复。理解响应头不仅能帮助我们处理文件下载、缓存控制,还能解决最头疼的跨域(CORS)和安全防护问题。
一、 响应报文的结构
HTTP 响应报文由三部分组成:状态行、响应头部、响应体。
-
状态行 (Status Line) :
- 包含:协议版本(HTTP/1.1)、状态码(200/404/500 等)、状态消息。
-
响应头部 (Response Headers) :
- 服务器向客户端传递的元数据,用于控制行为。
-
响应体 (Response Body) :
- 服务器返回的数据载体,如 HTML、JSON、图片二进制流。
二、 核心响应头字段分类详解
1. 资源基本信息
-
Content-Type:响应的文件类型(如
application/json,text/html)。 -
Content-Length:响应正文的长度(字节)。
-
Content-Encoding:数据的压缩算法(如
gzip,br)。 -
Content-Md5:响应主体的 MD5 摘要值,以便接收方可以验证实体内容的完整性。
-
Content-Disposition:控制浏览器如何处理数据。
inline:在浏览器直接打开。attachment; filename="...":作为附件下载。
2. 缓存控制 (Caching)
- Cache-Control:强缓存核心指令。
max-age设置有效期,no-cache进入协商缓存逻辑。 - Last-Modified:协商缓存标识,记录资源最后修改的时间。
- Vary:指定缓存服务器应依据哪些请求头来区分不同的缓存版本(例如,根据
User-Agent为桌面端和移动端返回不同的缓存页面)。
3. 跨域资源共享 (CORS) —— 解决接口报错的关键
- Access-Control-Allow-Origin:允许跨域的源(
*或具体域名)。 - Access-Control-Allow-Methods:服务器支持的跨域请求方法(如
GET, POST, OPTIONS)。 - Access-Control-Max-Age:**预检请求(OPTIONS)**的缓存有效期,减少不必要的请求开销。
4. 网络与代理信息
- Server:响应的服务器软件名称和版本号(生产环境常隐藏版本号以防被攻击)。
- Via:记录请求经过的代理服务器。
- X-Cache:指示内容是否命中 CDN 缓存(
HIT命中,MISS未命中)。
5. 安全防护 (Security)
-
Strict-Transport-Security (HSTS) :
- 强制浏览器在指定时间内(
max-age)必须通过 HTTPS 访问该域名,防止中间人劫持。
- 强制浏览器在指定时间内(
6. 阿里云 OSS 特有头部 (扩展)
如果你在使用云存储,常会看到以下自定义头:
- X-Oss-Request-Id:唯一请求 ID(排查问题的关键)。
- X-Oss-Storage-Class:存储类别(标准、低频等)。
三、 总结:常见场景速查
| 场景 | 关键 Headers |
|---|---|
| 强制下载文件 | Content-Disposition: attachment; filename="a.jpg" |
| 开启强缓存 | Cache-Control: public, max-age=31536000 |
| 解决跨域限制 | Access-Control-Allow-Origin: * |
| 强制 HTTPS | Strict-Transport-Security: max-age=31536000; preload |