0

我正在使用前面有 Varnish 的第三方 Web 服务。Varnish 存在是因为它是只读的,并且未缓存的请求相当慢。

我正在使用 jQuery 和 JSONP 查询网络服务。通常,$.getJSON通过带有 JSONP 的额外 GET 参数(根据 docs for $.ajax)使用 cachebusting。由于我的网络服务是只读的,我想要缓存的结果,所以我正在打电话

$.ajax({
  url: "http://example.com/json/callback=?",
  dataType: "jsonp",
  cache: true,
  data: data,
  success: callback
});

我可以通过 Chrome 中的网络选项卡看到请求发出,它们看起来像

http://example.com/json?callback=jQuery171047077397373504937_1348163237407&arg1=foo&arg2=bar

因为cache=true,我没有&_=[TIMESTAMP]在请求中得到额外的“”。

callback=回复非常非常慢,所以我认为由于请求的一部分,我有效地绕过了 Varnish 。

换句话说,假设 Varnish 考虑每个请求不同是否准确,因为 jQuery 为每个调用使用唯一的回调键,因此我永远不会取回缓存的结果?

在我要求第三方更改他们的 Varnish 之前,我想确保我已经确定了正确的问题,ala Ignoring GET parameters in Varnish VCL

4

1 回答 1

3

只有您的回调字符串不是获取变量,而只是请求 URL 的一部分。为了简化清漆配置,您可以添加一个?到该 URL 以使其成为 http://example.com/json/?callback=jQuery171047077397373504937_1348163237407&arg1=foo&arg2=bar

或者,您可以在清漆配置中的 req.url 上使用 regsub() ,例如:

set req.url = regsub(req.url, "callback=jQuery\d+_\d+&", "");
于 2012-09-21T07:28:06.203 回答