2014-10-27 121 views
1

如果我让通过AJAX调用的资源的多个请求以“缓存:假”,这是否防止使用请求头(或其他方式)缓存每个响应的浏览器,或者它旁路之前缓存的响应,因为资源URL由于_ =日期参数而变得唯一,因此永远不会匹配缓存中的任何内容?“缓存:false”PREVENT缓存还是UNIQUE-IFY请求绕过缓存?

作为参考,以下是有关ajax缓存属性的jquery文档:'如果设置为false,它将强制请求的页面不被浏览器缓存。注意:将缓存设置为false只能在HEAD和GET请求中正常工作。它通过在GET参数中附加“_ = {timestamp}”来工作。'

那么它真的“迫使请求的页面不被缓存”?还是仅仅通过追加日期来模仿这种影响 - 这种影响是没有任何两个请求都是相同的,因此产生了新的请求(但是所有的时候,糟糕的浏览器都有一堆缓存但从来没有使用过的响应)? (如果我很想理解缓存的工作方式,请随时上我!!)(我假设它基本上是一个关键值类型的系统,其中键是请求信息,值是响应)

+0

'或者这仅仅是imitate'。 – AD7six 2014-10-27 16:18:36

回答

0

是的,如果你设置了cache: false,那么它只会在url + params后面追加_ = {timestamp}。

从jQuery的src

cacheURL = s.url; 

    // More options handling for requests with no content 
    if (!s.hasContent) { 

     // If data is available, append data to url 
     if (s.data) { 
      cacheURL = (s.url += (rquery.test(cacheURL) ? "&" : "?") + s.data); 
      // #9682: remove data so that it's not used in an eventual retry 
      delete s.data; 
     } 

     // Add anti-cache in url if needed 
     if (s.cache === false) { 
      s.url = rts.test(cacheURL) ? 

       // If there is already a '_' parameter, set its value 
       cacheURL.replace(rts, "$1_=" + nonce++) : 

       // Otherwise add one to the end 
       cacheURL + (rquery.test(cacheURL) ? "&" : "?") + "_=" + nonce++; 
     } 
    }