我正在使用第三方网络服务,前面有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。
答案 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+&", "");