HTTP 103状态码如何通过Link头确认预加载资源
服务器在发送最终响应前可发送HTTP 103状态码,通过Link头告知浏览器需要预加载的资源。
检查HTTP 103状态码与Link头
在抓取诊断工具中查看响应状态码是否为103。如果状态码是103,则检查响应头中是否存在Link字段。Link字段中包含的资源链接即为服务器提示浏览器预加载的资源。例如,Link头中包含`<style.css>; rel=preload; as=style`,表示需要预加载样式表。
确认Link头中的资源类型。Link头中的`rel`属性决定了资源的加载方式。`rel=preload`表示预加载,`as=style`表示资源类型为样式表。浏览器会根据`as`属性设置正确的请求头,例如Accept-Language或Accept-Encoding,以确保资源正确加载。
验证预加载资源的加载状态
在浏览器开发者工具的Network面板中查看资源加载情况。如果服务器发送了103状态码和Link头,浏览器应在该响应后立即发起对Link头中资源的请求。检查该资源是否处于Pending或Loading状态,以确认预加载是否生效。
对比最终响应中的资源加载情况。最终响应(通常是200状态码)中可能包含相同的资源链接。如果预加载成功,浏览器会在最终响应到达前完成资源的加载。检查资源是否已缓存或处于Ready状态,以验证预加载对最终响应的影响。
排查跨域预加载问题
检查Link头中的资源是否涉及跨域请求。如果Link头指向跨域资源,浏览器会根据`rel`属性和`crossorigin`属性决定是否发起预连接。例如,`<https://cdn.example.com>; rel=preconnect; crossorigin`表示需要预连接到CDN域名,并处理跨域资源加载。
确认跨域资源的加载方式。跨域资源(如字体)必须通过单独的连接加载。如果Link头中包含`crossorigin`属性,浏览器会为该资源创建一个独立的连接。检查Network面板中是否有针对该跨域资源的额外请求,以确认跨域预加载是否正确执行。
确认Content-Security-Policy的影响
检查103响应头中是否包含Content-Security-Policy(CSP)。如果存在CSP头,浏览器会根据策略限制预加载资源的加载范围。例如,CSP头中包含`style-src: self;`,则浏览器只会预加载同源资源,而不会加载跨域资源。
验证CSP对预加载资源的限制效果。即使服务器在103响应中提示预加载跨域资源,CSP策略也可能阻止该资源的加载。检查浏览器控制台是否有CSP违规警告,并确认预加载资源是否被正确拦截或加载。这有助于确保预加载操作符合安全策略。
资料与延伸阅读
你可以通过以下原始资料核对文中概念,并继续深入阅读。