無變化搜尋

實驗性: 這是一個實驗性技術
在生產環境中使用此功能前,請仔細檢視瀏覽器相容性表格

No-Vary-Search 響應頭指定了一組規則,用於定義 URL 的查詢引數如何影響快取匹配。這些規則決定了具有不同 URL 引數的相同 URL 是否應作為單獨的瀏覽器快取條目儲存。

注意:推測規則 可以包含一個 expects_no_vary_search 欄位,該欄位指示瀏覽器透過推測規則接收預取/預渲染請求的文件的預期 No-Vary-Search 值(如果有)。瀏覽器可以使用此資訊提前確定在匹配推測規則時,等待現有預取/預渲染完成更有用,還是啟動新的獲取請求更有用。

頭型別 響應頭
禁止的頭名稱

語法

http
No-Vary-Search: key-order
No-Vary-Search: params
No-Vary-Search: params=("param1" "param2" "utm_campaign")
No-Vary-Search: params, except=("param1" "param2")

指令

key-order

布林值。如果包含在頭值中,則表示其他方面相同的 URL 之間引數順序的差異不會導致它們被快取為單獨的條目。引數存在的差異導致它們被單獨快取。

params

布林值或字串列表

  • 如果作為布林值包含在頭值中,則表示其他方面相同的 URL 之間引數的差異不會導致它們被快取為單獨的條目。
  • 如果作為列表包含在頭值中,則表示列出的特定引數的存在不會導致其他方面相同的 URL 被快取為單獨的條目。其他引數的存在導致它們被單獨快取。
except

字串列表。如果包含在頭值中,則表示列出的特定引數的存在導致其他方面相同的 URL 被快取為單獨的條目。其他引數的存在不會導致它們被單獨快取。必須包含布林值 params 指令以及 except,才能使它生效。

示例

允許來自引數順序不同的 URL 的響應匹配同一個快取條目

例如,如果您有一個搜尋頁面,它將搜尋條件儲存在 URL 引數中,並且您無法保證每次將引數新增到 URL 的順序都相同,則可以使用 key-order 允許來自除了引數順序之外其他方面相同的 URL 的響應匹配同一個快取條目。

http
No-Vary-Search: key-order

當此頭新增到關聯的響應時,以下 URL 在搜尋快取時將被視為等效

https://search.example.com?a=1&b=2&c=3
https://search.example.com?b=2&a=1&c=3

但是,不同 URL 引數的存在將導致這些 URL 被單獨快取。例如

https://search.example.com?a=1&b=2&c=3
https://search.example.com?b=2&a=1&c=3&d=4

以下示例說明了如何在快取匹配的上下文中控制忽略哪些引數。

允許來自具有不同引數的 URL 的響應匹配同一個快取條目

考慮使用者目錄登陸頁面 /users 已經被快取的情況。可以使用 id 引數來顯示特定使用者的資訊,例如 /users?id=345。此 URL 是否應被視為快取匹配目的下的相同,取決於應用程式的行為。

  • 如果此引數的效果是載入一個包含指定使用者資訊的全新頁面,則來自此 URL 的響應應單獨快取。
  • 如果此引數的效果是在同一頁面上突出顯示指定使用者,並可能顯示一個顯示其資料的彈出面板,則瀏覽器最好使用 /users 的快取響應。這可能會提高使用者頁面載入的效能。

如果您的應用程式的行為類似於上面描述的第二個示例,您可以透過以下 No-Vary-Search 頭使 /users/users?id=345 都被視為快取目的下的相同

http
No-Vary-Search: params=("id")

注意:如果使用 params 排除了快取鍵中的引數,則如果它包含在 URL 中,則無論它出現在引數列表中的什麼位置,它都將被忽略,以用於快取匹配。

允許來自具有多個不同引數的 URL 的響應匹配同一個快取條目

假設您還有用於對頁面上的使用者列表進行升序或降序字母排序以及指定顯示 UI 字串的語言的 URL 引數,例如 /users?id=345&order=asc&lang=fr

您可以讓瀏覽器在考慮快取匹配時忽略所有這些引數,如下所示

http
No-Vary-Search: params=("id" "order" "lang")

如果希望瀏覽器忽略所有這些引數以及快取匹配時可能存在的任何其他引數,則可以使用 params 的布林形式

http
No-Vary-Search: params

指定導致快取匹配未命中miss的引數

假設應用程式的行為有所不同,/users 指向主使用者目錄登陸頁面,而 /users?id=345 指向特定使用者的完全獨立的詳細資訊頁面。在這種情況下,您希望瀏覽器忽略上述所有引數以進行快取匹配,除了 id 之外,它的存在將導致瀏覽器不匹配 /users 快取條目並向伺服器請求 /users?id=345

這可以透過以下方式實現

http
No-Vary-Search: params, except=("id")

規範

規範
無變化搜尋

瀏覽器相容性

BCD 表格僅在啟用 JavaScript 的瀏覽器中載入。