103 Early Hints
HTTP 103 Early Hints 資訊性響應可能由伺服器在仍在準備響應時傳送,其中包含伺服器預期最終響應將連結到的站點和資源的提示。這允許瀏覽器在伺服器準備併發送最終響應之前,預連線到站點或開始預載入資源。由早期提示指示的預載入資源在客戶端收到提示後立即被獲取。
早期提示響應主要用於 Link 標頭,該標頭指示要載入的資源。它還可以包含一個 Content-Security-Policy 標頭,該標頭在處理早期提示時強制執行。
伺服器可能會發送多個 103 響應,例如,在重定向之後。瀏覽器僅處理第一個早期提示響應,如果請求導致跨域重定向,則必須丟棄此響應。
注意:出於相容性和安全原因,建議僅透過 HTTP/2 或更高版本傳送 HTTP 103 Early Hints 響應,除非已知客戶端能夠正確處理資訊性響應。
大多數瀏覽器為此原因將支援限制在 HTTP/2 或更高版本。請參閱下面的瀏覽器相容性。儘管如此,下面的示例仍按照慣例使用 HTTP/1.1 風格的表示法。
語法
103 Early Hints
示例
預連線示例
以下 103 早期提示響應顯示了一個早期提示響應,其中伺服器指示客戶端可能希望預連線到特定源(https://cdn.example.com)。就像 HTML rel=preconnect 屬性一樣,這是一個提示,表明頁面可能需要來自目標資源源的資源,並且瀏覽器可以透過搶先啟動與該源的連線來改善使用者體驗。
103 Early Hint
Link: <https://cdn.example.com>; rel=preconnect, <https://cdn.example.com>; rel=preconnect; crossorigin
此示例兩次預連線到 https://cdn.example.com
- 第一次連線將用於載入無需 CORS 即可獲取的資源,例如影像。
- 第二次連線包含
crossorigin屬性,將用於載入受 CORS 保護的資源,例如字型。
受 CORS 保護的資源必須透過完全獨立的連接獲取。如果您只需要來自一個源的一種型別的資源,那麼您只需預連線一次。
隨後,伺服器傳送最終響應。這包括一個跨域字型預載入和一個從附加源載入的 <img>。
200 OK
Content-Type: text/html
<!doctype html>
...
<link rel="preload" href="https://cdn.example.com/fonts/my-font.woff2" as="font" type="font/woff2" crossorigin>
...
<img src="https://cdn.example.com/images/image.jpg" alt="">
...
預載入示例
以下 103 早期提示響應表示最終響應可能需要樣式表 style.css。
103 Early Hint
Link: </style.css>; rel=preload; as=style
隨後,伺服器傳送最終響應。這包括一個指向樣式表的連結,該樣式表可能已從早期提示中預載入。
200 OK
Content-Type: text/html
<!doctype html>
...
<link rel="stylesheet" rel="preload" href="style.css" />
...
帶有 CSP 的早期提示響應
以下示例顯示了相同的早期提示響應,但包含 Content-Security-Policy 標頭。
103 Early Hint
Content-Security-Policy: style-src: self;
Link: </style.css>; rel=preload; as=style
早期響應將預載入限制為與請求相同的源。如果源匹配,樣式表將被預載入。
最終響應可能會將 CSP 設定為 none,如下所示。樣式表已經預載入,但在渲染頁面時不會使用。
200 OK
Content-Security-Policy: style-src: none;
Content-Type: text/html
<!doctype html>
...
<link rel="stylesheet" rel="preload" href="style.css" />
...
規範
| 規範 |
|---|
| 指示提示的 HTTP 狀態碼 # 早期提示 |
| HTML # 早期提示 |
瀏覽器相容性
載入中…
另見
Link- 跨源資源共享(CORS)
- 內容安全策略(CSP)
rel="preconnect"(<link>屬性)rel="preload"(<link>屬性)fetchpriority(<link>屬性)- 早期提示更新:Cloudflare、Google 和 Shopify 如何共同努力為所有人構建更快的網際網路(來自 Cloudflare 部落格)