无变化搜索
No-Vary-Search
响应头指定了一组规则,用于定义 URL 的查询参数如何影响缓存匹配。这些规则决定了具有不同 URL 参数的相同 URL 是否应作为单独的浏览器缓存条目保存。
注意:推测规则 可以包含一个 expects_no_vary_search
字段,该字段指示浏览器通过推测规则接收预取/预渲染请求的文档的预期 No-Vary-Search
值(如果有)。浏览器可以使用此信息提前确定在匹配推测规则时,等待现有预取/预渲染完成更有用,还是启动新的获取请求更有用。
语法
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 的响应匹配同一个缓存条目。
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
都被视为缓存目的下的相同
No-Vary-Search: params=("id")
注意:如果使用 params
排除了缓存键中的参数,则如果它包含在 URL 中,则无论它出现在参数列表中的什么位置,它都将被忽略,以用于缓存匹配。
允许来自具有多个不同参数的 URL 的响应匹配同一个缓存条目
假设您还有用于对页面上的用户列表进行升序或降序字母排序以及指定显示 UI 字符串的语言的 URL 参数,例如 /users?id=345&order=asc&lang=fr
。
您可以让浏览器在考虑缓存匹配时忽略所有这些参数,如下所示
No-Vary-Search: params=("id" "order" "lang")
如果希望浏览器忽略所有这些参数以及缓存匹配时可能存在的任何其他参数,则可以使用 params
的布尔形式
No-Vary-Search: params
指定导致缓存匹配未命中miss
的参数
假设应用程序的行为有所不同,/users
指向主用户目录登陆页面,而 /users?id=345
指向特定用户的完全独立的详细信息页面。在这种情况下,您希望浏览器忽略上述所有参数以进行缓存匹配,除了 id
之外,它的存在将导致浏览器不匹配 /users
缓存条目并向服务器请求 /users?id=345
。
这可以通过以下方式实现
No-Vary-Search: params, except=("id")
规范
规范 |
---|
无变化搜索 |
浏览器兼容性
BCD 表格仅在启用 JavaScript 的浏览器中加载。