跳到主要内容

HTTP 首部字段

首部字段的结构与分类是什么?​

  • 结构: 字段名: 字段值;
  • 按作用范围分四类:
    • 通用首部字段: 请求报文与响应报文都能用;
    • 请求首部字段: 只出现在请求报文;
    • 响应首部字段: 只出现在响应报文;
    • 实体首部字段: 描述报文主体;
  • 按来源分: HTTP/1.1 协议字段 (RFC2616) 与非 HTTP 协议字段 (RFC4229);

端到端首部与逐跳首部有什么区别?​

  • 端到端首部 (End-to-end Header): 必须转发给最终接收目标;
  • 逐跳首部 (Hop-by-hop Header): 只对单次转发有效, 代理不再转发;
  • 逐跳首部固定为: Connection、Keep-Alive、Proxy-Authenticate、Proxy-Authorization、Trailer、TE、Transfer-Encoding、Upgrade;

通用首部字段有哪些?​

字段作用
Cache-Control控制缓存行为
Connection控制不再转发的字段名, 或管理持久连接
Date报文的创建时间
PragmaHTTP 遗留字段, 等效 Cache-Control: no-cache
Trailer声明报文主体中出现的首部字段
Transfer-Encoding报文主体的传输编码方式, 如 chunked
Upgrade检测能否使用更高版本的协议, 与 Connection 协同使用
Via记录请求经过的代理传输路径
Warning记录缓存相关的警告

Cache-Control 的常用指令怎么选?​

指令含义
public响应可被浏览器与代理服务器缓存
private响应只可被浏览器缓存
no-cache跳过强缓存, 进入协商缓存
no-store完全不使用缓存
max-age=n缓存最长生效时间(秒)
min-fresh=n缓存至少还需保持有效 n 秒
max-stale=n过期不超过 n 秒的缓存仍可接受
only-if-cached仅在已有缓存时返回
must-revalidate / proxy-revalidate过期后必须向源服务器验证
no-transform禁止代理改变实体主体的 MIME 类型
Cache-Control: public, max-age=86400

请求首部字段有哪些?​

字段作用
Accept客户端支持的媒体类型与优先级, q 取值 0~1 默认 1, */* 表示任意类型
Accept-Charset支持的字符集与优先级
Accept-Encoding支持的内容编码与优先级, 如 gzip, deflate
Accept-Language支持的自然语言与优先级
Authorization客户端认证信息, 用于 401 之后重发
Expect期待服务端出现的行为, 如 100-continue
From客户端邮箱地址
Host目标服务器 URL, 必须携带
Max-Forwards最大转发次数, 作用于 TRACE 与 OPTIONS
Proxy-Authorization对代理服务器的认证信息
Range请求的字节范围, 如 bytes=5001-10000
Referer发起请求的页面 URL
TE可接受的传输编码, 作用在传输编码而非内容编码
User-Agent浏览器与客户端种类
Cookie客户端保存并回传的状态信息

响应首部字段有哪些?​

字段作用
Accept-Ranges服务器能否处理范围请求, 取值 bytes 或 none
Age响应在缓存中已存活的秒数
ETag资源唯一标识, 用于协商缓存
Location引导客户端访问的 URL, 常配 3XX
Proxy-Authenticate代理要求的认证信息
Retry-After建议客户端重试的等待时间, 常配 3XX 与 503
Server服务端 Web 服务器信息
Vary缓存判定字段, 仅该字段相同的请求才复用缓存
Set-Cookie通知客户端保存状态信息

Vary

实体首部字段有哪些?​

字段作用
Allow资源支持的 HTTP 方法
Content-Encoding主体使用的内容编码, 如 gzip
Content-Language主体使用的自然语言
Content-Length主体的字节长度
Content-Location主体对应的 URL, 与 Location 不同
Content-MD5主体的 MD5 摘要
Content-Range主体在完整资源中的范围, 如 bytes 5001-10000/10000
Content-Type主体的 MIME 类型与字符集
Expires实体失效时间, HTTP/1.0 的强缓存字段
Last-Modified资源最后被修改的时间