使用jQuery绕过Varnish JSONP请求吗?

时间:2012-09-20 18:09:35

标签: jquery jsonp varnish

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

我正在使用jQuery和JSONP查询webserivce。通常,$.getJSON通过带有JSONP的额外GET参数(根据$.ajax的文档)使用cachebusting。由于我的webservice是只读的,我想缓存结果,所以我正在调用我的调用

$.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为每个调用都使用了一个唯一的回调密钥,因此我永远不会收回缓存的结果?

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

1 个答案:

答案 0 :(得分:3)

只有你的回调字符串不是get变量,而只是请求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+&", "");