變更 HTTP 快取的響應
到目前為止,我們都假設每個 URI 對應到目標資源的單一表示形式。預設情況下,HTTP 快取會使用資源的 URI 作為快取鍵。如果兩個人請求同一個可快取資源的 URI,第二個人將會收到快取的版本。
有時候這還不夠,需要根據一個或多個請求標頭值來快取同一個 URI 的不同版本。例如,如果當用戶端支援壓縮時您壓縮頁面,則任何給定的 URI 都有兩種表示形式:一種是用戶端支援壓縮時的版本,另一種是不支援壓縮時的版本。這種判斷是根據 Accept-Encoding
請求標頭的值來完成的。
在這種情況下,您需要快取為特定的 URI 儲存壓縮和未壓縮版本的響應,並根據請求的 Accept-Encoding
值返回它們。這是通過使用 Vary
響應標頭來完成的,Vary
響應標頭是一個逗號分隔的列表,其中列出了觸發請求資源不同表示形式的不同標頭的值
1
Vary: Accept-Encoding, User-Agent
提示
這個特定的 Vary
標頭將根據 URI 以及 Accept-Encoding
和 User-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 授權條款授權。