Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用jQuery的JSONP请求是否绕过清漆?_Jquery_Jsonp_Varnish - Fatal编程技术网

使用jQuery的JSONP请求是否绕过清漆?

使用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

我正在使用一个前面有清漆的第三方Web服务。Varnish之所以存在是因为它是只读的,而未缓存的请求相当慢

我正在使用jQuery和JSONP查询webserivce。通常,使用JSONP通过一个额外的GET参数使用CacheBrasting(根据的文档)。因为我的Web服务是只读的,所以我希望缓存结果,所以我的调用如下

$.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”选项。这看起来确实解决了我的问题。谢谢