Skip to content

报文·首部·状态码与 HTTP 缓存

前节侧重 报文结构与状态码,后节侧重 缓存策略


第一部分:报文、首部与状态码

HTTP 报文由 起始行、首部字段、空行、可选正文 组成;请求与响应各有常用首部。

请求侧(常见)

首部作用
Host虚拟主机路由必带
Accept / Accept-Encoding / Accept-Language可接受的类型、压缩、语言
Content-Type请求体 MIME(如 application/json
Authorization凭证(Bearer Token 等)
Cookie浏览器自动携带的同源 Cookie
If-None-Match / If-Modified-Since协商缓存验证
OriginCORS 预检与跨域请求标识来源

响应侧(常见)

首部作用
Content-Type响应体类型
Cache-Control / Expires强缓存
ETag / Last-Modified协商缓存标签
Set-Cookie服务端种下 Cookie
Location重定向目标

状态码族(速查)

区间含义常见
1xx信息100 Continue101 Switching Protocols
2xx成功200 OK201 Created204 No Content
3xx重定向301 永久,302/307/308 临时,304 Not Modified(缓存验证)
4xx客户端错误400 参数错,401 未认证,403 无权限,404 不存在,429 限流
5xx服务端错误500 内部错误,502 网关坏,503 不可用,504 网关超时

304:响应无正文,浏览器使用本地缓存副本(配合 ETag/Last-Modified)。


小结

定位接口问题:先看状态码族 → 再看响应头 Content-Type / 缓存相关 → Network 里对照请求方法是否与幂等语义一致


第二部分:HTTP 缓存

目的:减少重复传输、降低服务端压力、加快加载。分为 强缓存协商缓存,浏览器通常 先尝试强缓存,失效再协商


强缓存(不发请求或极少)

由响应头告知浏览器在有效期内 直接使用本地副本

首部说明
Cache-ControlHTTP/1.1 主用,如 max-age=31536000public/private
ExpiresHTTP/1.0 绝对过期时间,易被 Cache-Control 覆盖

常用指令:

  • max-age:秒级生存时间。
  • no-cache:并非不缓存,而是 使用前必须与服务器验证(走协商)。
  • no-store完全不存,适合敏感数据。

协商缓存(发请求,可能 304)

浏览器带上缓存校验字段,服务器判断资源是否变化。

响应给出下次请求携带说明
Last-ModifiedIf-Modified-Since秒级精度,内容未变也可能变时间戳
ETagIf-None-Match实体标签,通常更精准

未变更则 304 Not Modified,正文从磁盘读。


SPA 常见策略(提要)

  • 带 hash 的静态资源:文件名变化即新 URL,可配 max-age
  • 入口 HTML:多用 no-cache 或短缓存,确保尽快拿到新引用。

与「JS 里看到的缓存」

浏览器 HTTP 缓存与 Memory Cache / Disk Cache 的表现可在 DevTools Network 的 Size 列观察(from disk cache 等)。与 Service Worker 缓存 不同 layer,勿混淆。


小结

记清:no-cache vs no-store强缓存省请求,协商缓存靠 ETag/304;接口动态数据慎用强缓存。