我正在使用前面有 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。