使用jQuery的JSONP请求是否绕过清漆?
我正在使用一个前面有清漆的第三方Web服务。Varnish之所以存在是因为它是只读的,而未缓存的请求相当慢 我正在使用jQuery和JSONP查询webserivce。通常,使用JSONP通过一个额外的GET参数使用CacheBrasting(根据的文档)。因为我的Web服务是只读的,所以我希望缓存结果,所以我的调用如下使用jQuery的JSONP请求是否绕过清漆?,jquery,jsonp,varnish,Jquery,Jsonp,Varnish,我正在使用一个前面有清漆的第三方Web服务。Varnish之所以存在是因为它是只读的,而未缓存的请求相当慢 我正在使用jQuery和JSONP查询webserivce。通常,使用JSONP通过一个额外的GET参数使用CacheBrasting(根据的文档)。因为我的Web服务是只读的,所以我希望缓存结果,所以我的调用如下 $.ajax({ url: "http://example.com/json/callback=?", dataType: "jsonp", cache: true
$.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]
”
响应返回的速度非常非常慢,因此我认为由于请求的回调=
部分,我实际上绕过了清漆
换句话说,假设Varnish认为每个请求都是不同的,因为jQuery对每个调用都使用唯一的回调键,因此我永远不会返回缓存结果,这是否准确
在我要求第三方更改其Varnish ala之前,我想确保我已经确定了正确的问题。只有回调字符串不是get变量,只是请求URL的一部分。为了简化清漆配置,您可以添加?到该URL来创建它 或者,您可以在varnish配置中的req.url上使用regsub(),如下所示
set req.url = regsub(req.url, "callback=jQuery\d+_\d+&", "");
只有回调字符串不是get变量,只是请求URL的一部分。为了简化清漆配置,您可以添加?到该URL来创建它 或者,您可以在varnish配置中的req.url上使用regsub(),如下所示
set req.url = regsub(req.url, "callback=jQuery\d+_\d+&", "");
谢谢当我清理URL时,我对它进行了粗手指操作;它真的有这个功能吗?在里面。您是否同意callback=导致Varnish永远不会缓存请求?它看起来会在每个请求中都发生更改,是吗?我只使用命名回调,因此不确定回调生成如何工作。如果它在每个请求中都是唯一的,那么您也可以通过在调用中使用jsonpCallback属性来更改它来解决。我不知道我读了多少次该文档页面,但我从未注意到$.ajax()的“jsonp”和“jsonpCallback”选项。这看起来确实解决了我的问题。谢谢,谢谢。当我清理URL时,我对它进行了粗手指操作;它真的有这个功能吗?在里面。您是否同意callback=导致Varnish永远不会缓存请求?它看起来会在每个请求中都发生更改,是吗?我只使用命名回调,因此不确定回调生成如何工作。如果它在每个请求中都是唯一的,那么您也可以通过在调用中使用jsonpCallback属性来更改它来解决。我不知道我读了多少次该文档页面,但我从未注意到$.ajax()的“jsonp”和“jsonpCallback”选项。这看起来确实解决了我的问题。谢谢