带查询字符串 URL 的 HTTP 代理缓存
为基于查询的资源制定有意的缓存策略,同时将其参数值保留在缓存键中。
在现代 HTTP 规则下,查询字符串并不会让响应无法缓存。像 /catalog?page=2 这样的公共资源可以直接声明其预期的新鲜度:
Cache-Control: public, max-age=60这是面向公共内容的示例性策略。响应仍须满足其他可缓存性要求。个性化结果不应仅仅因为代理运营者想要更高的命中率就获得共享缓存。
查询仍是缓存键中所用目标 URI 的一部分。第 2 页和第 3 页是不同的请求。为了让它们的 URL 看起来相同而剥离查询,可能会用其中一个结果去响应另一个;这并不会使结果等价。
HTTP 早期针对查询 URL 的启发式新鲜度限制,在被证明实现不佳之后已被移除。显式新鲜度可避免依赖缓存的猜测,而本地代理规则仍可排除特定 URL。
普通的 HTTPS CONNECT 流量将资源及其缓存策略留在 TLS 内部。隧道式正向代理并不会仅仅因为 URL 带有查询就为这些页面获得对象缓存。