我可以获得在Varnish中缓存的Ajax交付内容吗?

时间:2013-06-08 00:08:28

标签: ajax varnish

所以我绝望地试图让Varnish完全缓存我的php应用程序。

它是一个繁重的应用程序,每个页面加载需要2到4秒,因为它会生成多个CURL请求来填充页面内容。

其中一些内容是通过php + curl加载的,其余的是通过php + curl + ajax_manager + ajax加载的。

这是ajax内容我遇到缓存问题。

网页网址,例如:domain.com/search.html?q=Some+Query&var=ABC&gclid=23ndo2dofbwvrf2ih2v3jv

现在我可以使用varnish来缓存除ajax之外的所有内容。问题是一旦页面在缓存中我再也看不到ajax内容了,其他一切都在那里,ajax内容只在 那里出现在第一页加载即新拷贝。

我能以某种方式将其推向清漆吗?

我将我的ajax调用从POST切换到GET,看起来它可以阻止包含无缓存控件的标题,但我仍然无法找到将ajax内容推送到varnish中的方法。

这是我现在提出的所有工作但忽略了ajax,并没有缓存它并且缓存中缺少ajax内容。

sub vcl_recv {

    set req.url = regsuball(req.url,"\?gclid=[^&]+$",""); # strips when QS = "?gclid=AAA"
    set req.url = regsuball(req.url,"\?gclid=[^&]+&","?"); # strips when QS = "?gclid=AAA&foo=bar"
    set req.url = regsuball(req.url,"&gclid=[^&]+",""); # strips when QS = "?foo=bar&gclid=AAA" or QS = "?foo=bar&gclid=AAA&bar=baz"

    ## always cache these images & static assets
    if (req.request == "GET" && req.url ~ "\.(css|js|gif|jpg|jpeg|bmp|png|ico|img|tga|wmf)$") {
      remove req.http.cookie;
      return(lookup);
    }

    if (req.request == "GET" && req.http.X-Requested-With != "XMLHttpRequest") {
   #   remove req.http.cookie;
    #  return(lookup);
    }

    return(lookup);
}

sub vcl_fetch {

if (beresp.ttl < 120s) {
   set beresp.ttl = 120s;
  }

unset beresp.http.Set-Cookie;
set beresp.ttl = 6h;
return(deliver);


}

好消息是页面加载时间从2到4秒变为250毫秒,这是令人惊叹的,如果我可以得到这个工作会产生巨大的差异。

感谢

0 个答案:

没有答案