HTTP-深度拆解 HTTP 响应报文

46 阅读2分钟

前言

如果说“请求报文”是客户端提出的要求,那么 “响应报文” 就是服务器给出的答复。理解响应头不仅能帮助我们处理文件下载、缓存控制,还能解决最头疼的跨域(CORS)和安全防护问题。

一、 响应报文的结构

HTTP 响应报文由三部分组成:状态行响应头部响应体

  1. 状态行 (Status Line)

    • 包含:协议版本(HTTP/1.1)、状态码(200/404/500 等)、状态消息。
  2. 响应头部 (Response Headers)

    • 服务器向客户端传递的元数据,用于控制行为。
  3. 响应体 (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: *
强制 HTTPSStrict-Transport-Security: max-age=31536000; preload

四、响应示例

image.png

image.png