跳到主要內容

變更 HTTP 快取的響應

編輯此頁面

到目前為止,我們都假設每個 URI 對應到目標資源的單一表示形式。預設情況下,HTTP 快取會使用資源的 URI 作為快取鍵。如果兩個人請求同一個可快取資源的 URI,第二個人將會收到快取的版本。

有時候這還不夠,需要根據一個或多個請求標頭值來快取同一個 URI 的不同版本。例如,如果當用戶端支援壓縮時您壓縮頁面,則任何給定的 URI 都有兩種表示形式:一種是用戶端支援壓縮時的版本,另一種是不支援壓縮時的版本。這種判斷是根據 Accept-Encoding 請求標頭的值來完成的。

在這種情況下,您需要快取為特定的 URI 儲存壓縮和未壓縮版本的響應,並根據請求的 Accept-Encoding 值返回它們。這是通過使用 Vary 響應標頭來完成的,Vary 響應標頭是一個逗號分隔的列表,其中列出了觸發請求資源不同表示形式的不同標頭的值

1
Vary: Accept-Encoding, User-Agent

提示

這個特定的 Vary 標頭將根據 URI 以及 Accept-EncodingUser-Agent 請求標頭的值來快取每個資源的不同版本。

透過 Response 物件方法或 #[Cache] 屬性設定 Vary 標頭

1
2
3
4
5
6
7
8
9
10
11
// this attribute takes an array with the name of the header(s)
// names for which the response varies
use Symfony\Component\HttpKernel\Attribute\Cache;
// ...

#[Cache(vary: ['Accept-Encoding'])]
#[Cache(vary: ['Accept-Encoding', 'User-Agent'])]
public function index(): Response
{
    // ...
}
本作品,包括程式碼範例,以 Creative Commons BY-SA 3.0 授權條款授權。
目錄
    版本