'cache:false'PREVENT缓存,还是UNIQUE-IFY绕过缓存的请求?

时间:2014-10-27 15:52:07

标签: javascript jquery ajax caching backbone.js

如果我通过带有' cache:false'的ajax调用对资源发出多个请求,那么阻止浏览器使用请求标头缓存每个响应(或其他一些方式),或绕过以前缓存的响应,因为资源网址由于_ =日期参数而变得唯一,因此永远不会匹配缓存中的任何内容?

作为参考,这里是关于ajax缓存属性的jquery文档:' 如果设置为false,它将强制浏览器不缓存请求的页面。注意:将缓存设置为false只能与HEAD和GET请求一起正常工作。它的工作原理是附加" _ = {timestamp}"到GET参数。'

它是否真的强制要求的页面不被缓存'?或者它只是通过附加日期来模仿这种效果 - 具有影响,没有两个请求是相同的,因此提出了一个新的请求(但是糟糕的浏览器一直有一大堆缓存但从未使用过的响应)? / p>

(如果我很想理解缓存的工作方式,请随时给我上学!!(我假设它基本上是一个键值类型的系统,其中键是请求信息,值是对该请求的回应。))

1 个答案:

答案 0 :(得分: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++;
        }
    }