题干与适用场景
页面 HTML 生成较慢,但服务器已经知道可能需要的样式、字体或 CDN 连接。请设计 103 Early Hints 的发送策略,说明它与最终响应的关系、兼容边界和验证方法。
本文适合后端、边缘网关和性能工程岗位。假设请求最终会返回 2xx 或重定向,且资源清单可能因用户、实验或权限变化而改变。
面试官考察点
- 是否理解 103 是临时提示,不是最终响应,也不能承载业务状态。
- 是否能根据资源确定性、协议版本和跨源行为决定发送或跳过。
- 是否能处理提示与最终响应不一致、重定向和 CSP 的边界。
- 是否会用真实浏览器、缓存和协议分层指标证明收益,而非只看服务器耗时。
回答前需要澄清的问题
- 资源在生成最终 HTML 前是否已确定?不确定时发送会增加无效下载。
- 链路是否为 HTTP/2 或更高?旧 HTTP/1.1 客户端的 informational response 处理可能不安全。
- 哪些资源值得提示?关键 CSS、字体或连接预热与低优先级图片的收益不同。
- 是否存在跨源重定向、CSP、用户分流或权限差异?这些都会改变提示的有效性。
30 秒回答框架
“我把 103 当作可丢弃的性能提示,只发送高置信度且最终响应可能复用的 Link 资源。默认要求 HTTP/2 或更高,先在 CDN 与源站协商清单,遇到跨源重定向或资源不确定就跳过。最终响应仍必须重复真实的 Link 和 CSP,业务逻辑不能依赖 103。灰度时同时测首字节、资源开始时间、有效命中率、重复下载和错误率,收益不足就关闭提示。”
分步骤深入解答
1. 把提示和业务响应解耦
RFC 8297 将 103 定义为 informational response:客户端可以在等待最终响应时投机处理 header,但不能把它当作最终元数据。服务端应只放性能提示,不能放授权、价格或成功状态。最终响应必须独立正确,即使 103 被代理丢弃。
2. 选择高确定性的 Link
优先提示首屏必需的 CSS、字体或到固定 CDN 的 preconnect。用户分组、权限、A/B 实验会改变资源时,先计算一个安全交集,或者直接跳过。提示不等于强制下载,仍要遵守 as、CORS 和 CSP 约束。
3. 设定协议与重定向闸门
兼容性和安全要求使 HTTP/2 或更高成为默认闸门。若请求最终跨源重定向,浏览器可能丢弃第一条 103;网关也可能合并或重排 informational response。代理链必须在灰度中确认 103 没有被错误当成最终响应。
4. 处理 CSP 与最终响应不一致
103 可以携带限制预加载的 CSP,但最终响应仍是权威策略。若服务端后来发现资源错误,客户端可能已经开始预加载;因此提示应只覆盖低风险、可缓存或可安全丢弃的资源。不要用 103 作为绕过最终 CSP 的路径。
5. 用分层指标验证
对照组不发送 103,实验组只对 HTTP/2 或更高发送。记录 103 到达率、资源请求提前量、有效预加载比例、重复请求、最终 LCP、带宽和错误率。分别按缓存命中、跨源重定向和设备类型切片;服务器 TTFB 变快但 LCP 不变时,应撤回方案。
高质量示范回答
我会先确认 103 只承载性能提示,最终响应不依赖它。对于 HTTP/2 或更高的请求,我只提示高置信度的首屏 CSS、字体或固定 CDN 连接;用户分流、权限和跨源重定向让资源清单不确定时就跳过。网关和浏览器灰度要验证 informational response 没被当成最终响应,最终响应继续发送真实 Link 与 CSP。发布时比较 103 到达率、有效命中率、重复下载、LCP、带宽和错误率,按缓存与设备切片;若只是服务器 TTFB 改善而用户指标不变,就关闭 Early Hints。
常见错误
- 错误表现:把 103 当成成功响应。失败原因:它没有业务完成语义,代理丢失也不应改变结果。修正方法:最终响应独立完成授权、状态和正文。
- 错误表现:对所有资源发送 preload。失败原因:动态页面会产生无效下载、带宽浪费和缓存污染。修正方法:只提示高确定性资源,并以有效命中率验收。
- 错误表现:忽略 HTTP/1.1 和代理链。失败原因:旧客户端可能错误处理 informational response。修正方法:协议版本闸门、代理兼容测试和可关闭开关。
- 错误表现:只测 TTFB。失败原因:提前提示不一定改善渲染,甚至可能增加带宽竞争。修正方法:测 LCP、重复请求、带宽和错误率。
追问及应对
如果 103 中的资源后来不需要了怎么办?
把 103 限制为可安全预取的资源,并接受少量投机成本;通过无效下载率设定上限。不能用 103 保证资源一定会被使用。
跨源重定向时是否继续发送?
默认跳过或只提示与最终目标无关的安全连接预热。浏览器可能丢弃第一条 103,代理也可能改变顺序,必须以真实链路测试结果决定。
最终响应的 Link 与 103 不一致可以吗?
可以,103 是提示,最终响应是权威结果;但差异过大说明预测器质量低,应降低发送范围并监控重复下载。
如何避免 103 泄露用户信息?
不在提示中放权限、实验分组或敏感 URL。按公开且低风险的资源集合生成,并让最终 CSP 和授权检查继续生效。
何时选择普通 HTML preload 而不是 103?
当资源只有在 HTML 生成后才确定,或链路无法可靠传递 informational response 时,直接在最终 HTML 中声明 preload 更简单。103 适合服务器较晚生成 HTML、但较早知道资源集合的场景。