缓存控制:验证缓存时是否可以忽略查询参数?

时间:2013-10-01 21:11:36

标签: reverse-proxy varnish http-caching

是否可以设置与反向代理通信的cache-control标头,以便在确定什么是唯一的uri时简单地忽略查询参数,或者简单地说:即使某些查询参数已更改,也要验证缓存?

有时,查询参数与页面呈现无关,至少从服务器端的角度来看。例如,来自Google Adwords的所有utm_*变量。这些是您页面上的javascript所必需的,因此您不想将它们剥离并重定向到缓存页面,但同时不处理两个基本相同但具有不同{{1}的uri是有利的。与反向代理通信时,参数为唯一。

一个例子:

  1. utm_*

  2. http://www.example.com/search?sort=price

  3. 无论如何使用HTTP 1.1规范(即某种类型的http标头)告诉反向代理,它可以将这两个页面视为相同吗?

1 个答案:

答案 0 :(得分:1)

您可以在vcl_recv中过滤查询字符串,并且还有一个Varnish模块[1]。

此外,您必须记住,查询字符串参数顺序在这种情况下很重要[2]

另见相关问题[3]

[1] https://www.varnish-cache.org/vmod/querystring

[2] http://cyberroadie.wordpress.com/2012/01/05/varnish-reordering-query-string/

[3] Stripping out select querystring attribute/value pairs so varnish will not vary cache by them