3

我是 Varnish 的新手,我想知道 Varnish 是否支持使用 http 标头进行缓存。我们设计了一个基于 Rest 的 web 服务,我正在考虑使用 Varnish 来缓存结果。一些请求信息(apikey)是如何通过 http 标头传递的,我想知道 Varnish 在检查传入请求(与查询字符串)时是否可以将其考虑在内。

4

1 回答 1

10

是的你可以。应该如何考虑这个 API 密钥?如果您希望每个用户都有唯一的缓存条目,则仅当特定用户多次请求相同数据时才使用缓存。通过设置正确的 Cache-Control HTTP 响应标头(尽管不会重新验证数据新鲜度),您可以在不使用 varnish 之类的缓存代理的情况下获得很长的路要走。

Varnish 中至少有两种方法。

  1. 让您的应用程序返回一个 HTTP-Response 标头Vary: apikey。这指示任何 HTTP 级别缓存(如 varnish)仅在 apikey 请求标头相同的情况下重用缓存结果。

  2. 或者,更有效地,修改 vcl 配置中的 vcl_hash 函数以考虑 apikey 标头。

    sub vcl_hash { 设置 req.hash += req.http.apikey; }

于 2011-05-24T08:28:43.090 回答