标准答案
- Content-Type 描述消息体的媒体类型和可选字符集,例如 application/json 或 text/html; charset=utf-8,客户端据此选择解析方式。
- Accept 由客户端发送,用来表达能够处理的响应媒体类型;服务端可按协商结果返回内容,不能满足时可返回 406 或选择约定的默认格式。
- Cache-Control 定义浏览器和共享缓存是否可缓存、缓存多久、能否复用过期内容等策略,例如 private、public、no-store、max-age。
- ETag 是资源表示的版本标识。客户端带 If-None-Match 请求时,资源未变化可返回 304,减少重复传输。
- 缓存头必须与数据敏感性、认证方式、CDN 行为和更新策略一起设计,不能只为了提速统一设长缓存。
题目解析
Content-Type 和 Accept 分别是“我发的是什么”和“我能接收什么”,它们不是可有可无的字符串;错误的类型会造成解析、安全策略或下载行为异常。
ETag 解决的是验证缓存是否仍有效,不等同于设置缓存时长。实际缓存命中还受 Cache-Control、Vary 和代理缓存键影响。
常见误区
- 把 Content-Type 和 Accept 的方向说反。
- 给包含用户数据的响应设置 public 缓存。
- 认为设置 ETag 后浏览器一定不会再向服务端发请求。