Http Cache-Control 与多个浏览器冲突 Tabs/Sessions
Http Cache-Control Clashes with Multiple Browser Tabs/Sessions
我正在使用 Angular 5,后端是 Hapi NodeJs。当我在 http 响应中发送 "cache-control: private, max-age=3600" header 时,响应被正确缓存。问题是,当我在不同的选项卡中发出完全相同的请求并连接到不同的数据库时,浏览器选项卡 1 中缓存的数据在发出相同请求时与浏览器选项卡 2 共享。有没有办法使用 cache-control header?
仅在每个应用程序实例中使用缓存
- 浏览器选项卡 1 中的相同 Webapp。相同域。
- 数据库 1
- 浏览器选项卡 2 中的相同 Webapp。相同域。
- 数据库 2
用户代理需要以某种方式区分这些缓存条目。可能您最好的选择是调整缓存条目键(将标识数据库的子域、路径或查询参数添加到 URI)。
您还可以使用自定义 HTTP header(例如 X-Database
),与 Vary
HTTP header 配对,但在这种情况下,用户代理可能只存储单个一次响应,因为它仍然使用 URI 作为缓存键和 Vary
HTTP header 仅用于响应验证。 Mark Nottingham 的 The State of Browser Caching, Revisited 文章的相关摘录:
The one hiccup I saw was that all tested browser caches would only store one variant at a time; i.e., if your responses contain Vary: Foo
and you get two requests, the first with Foo: 1
and the second with Foo: 2
, the second response will evict the first from cache.
Whether that’s a problem depends on how you use Vary
; if you want to reuse cached responses with old values, it might reduce efficiency. However, that doesn’t seem like a common use case;
有关详细信息,请查看 Andrew Betts 的 RFC 7234 Hypertext Transfer Protocol (HTTP/1.1): Caching, and Understanding The Vary Header 文章
我正在使用 Angular 5,后端是 Hapi NodeJs。当我在 http 响应中发送 "cache-control: private, max-age=3600" header 时,响应被正确缓存。问题是,当我在不同的选项卡中发出完全相同的请求并连接到不同的数据库时,浏览器选项卡 1 中缓存的数据在发出相同请求时与浏览器选项卡 2 共享。有没有办法使用 cache-control header?
仅在每个应用程序实例中使用缓存- 浏览器选项卡 1 中的相同 Webapp。相同域。
- 数据库 1
- 浏览器选项卡 2 中的相同 Webapp。相同域。
- 数据库 2
用户代理需要以某种方式区分这些缓存条目。可能您最好的选择是调整缓存条目键(将标识数据库的子域、路径或查询参数添加到 URI)。
您还可以使用自定义 HTTP header(例如 X-Database
),与 Vary
HTTP header 配对,但在这种情况下,用户代理可能只存储单个一次响应,因为它仍然使用 URI 作为缓存键和 Vary
HTTP header 仅用于响应验证。 Mark Nottingham 的 The State of Browser Caching, Revisited 文章的相关摘录:
The one hiccup I saw was that all tested browser caches would only store one variant at a time; i.e., if your responses contain
Vary: Foo
and you get two requests, the first withFoo: 1
and the second withFoo: 2
, the second response will evict the first from cache.Whether that’s a problem depends on how you use
Vary
; if you want to reuse cached responses with old values, it might reduce efficiency. However, that doesn’t seem like a common use case;
有关详细信息,请查看 Andrew Betts 的 RFC 7234 Hypertext Transfer Protocol (HTTP/1.1): Caching, and Understanding The Vary Header 文章