Priority 是什么
Priority 是 RFC 9218 定义的可扩展优先级方案请求头,用两个参数描述调度偏好:u(urgency,取值 0 到 7,越小越紧急,默认 3)与 i(incremental,是否允许增量分发)。它取代了 HTTP/2 早期那套复杂且实现混乱的依赖树优先级。客户端用它表达「哪些资源更重要」,但服务器与中间节点都可以忽略这条提示。
基本信息
| 名称 | Priority |
|---|---|
| 方向 | 请求头(响应侧也可协商使用) |
| 规范 | RFC 9218 |
| 参数 u | 取值 0 到 7,0 最高、7 最低,默认 3 |
| 参数 i | 取 1 表示允许增量分发,缺省为 0 |
| 性质 | 调度偏好提示,服务器可以不采纳 |
典型使用场景
- 关键资源提速:主文档与首屏资源用更高紧急度,减少渲染阻塞
- 后台流量降级:预取、埋点、上报类请求压到最低优先度
- CDN 与边缘调度调优:观察边缘节点是否尊重客户端给出的优先级
- 排障:确认优先级提示是否被中间层剥离或忽略
- 前端性能优化:与懒加载策略配合,避免次要资源抢占带宽
- 协议演进了解:对比已废弃的 HTTP/2 依赖树优先级方案
优先级示例
优先级示例
# 关键资源:最高紧急度并允许增量分发(边生成边发)
Priority: u=0, i
# 预取类资源:最低紧急度,等带宽空闲再传
Priority: u=7
# 不写该头等价于 u=3, i=0(一次性发送)
curl -sI https://cdn.example.com/app.js -H 'Priority: u=1'参数读法
| 参数 | 取值 | 含义 |
|---|---|---|
| u | 0 到 7,默认 3 | 数值越小越紧急 |
| i | 0 或 1,缺省 0 | 为 1 时允许增量分发,适合边算边发 |
| u=0, i | 组合写法 | 首屏关键资源常用 |
| u=7 | 单独写法 | 预取、埋点等可延迟流量 |
优先级只是提示,服务器可以忽略;客户端不应把资源可用性建立在优先级一定生效的前提上。
HTTP/2、HTTP/3 与支持该头的 HTTP/1.1 服务器都能使用;CDN 与网关的支持度差异较大,上线前需实测。
为每个资源都写 u=0 等于没有优先级:要形成梯度,调度才有意义。
已废弃的 HTTP/2 PRIORITY 帧与本头的机制不同,混用可能得到相反效果,新实现应统一到 RFC 9218 的方案上。