NSURLRequests的默认缓存过期时间是多少?

hen*_*rik 8 caching http objective-c nsurlrequest ios

我正在使用NSURLRequest来检查可用的数据更新.今天我注意到,NSURLRequest默认缓存了请求.即使在几个小时之后,也没有向服务器发送新请求.现在我想知道这个缓存的默认行为是什么.缓存的数据何时过时并且新请求会发送到服务器?数据是静态文件,服务器不发送显式缓存控制头:

HTTP/1.1 200 OK
Date: Fri, 13 Apr 2012 08:51:13 GMT
Server: Apache
Last-Modified: Thu, 12 Apr 2012 14:02:17 GMT
ETag: "2852a-64-4bd7bcdba2c40"
Accept-Ranges: bytes
Content-Length: 100
Vary: Accept-Encoding,User-Agent
Content-Type: text/plain

PS:我的应用程序的新版本设置了一个明确的缓存策略,所以这不再是一个问题,但我很好奇默认行为是什么.

N_A*_*N_A 15

注意:这里详细说明了它应该如何工作

  1. 如果没有缓存,则获取数据.

  2. 如果有缓存,请检查加载方案

    一个.如果指定了重新验证,请检查源是否有更改

    湾 如果未指定重新验证,则按照3)从本地缓存中获取

  3. 如果未指定重新验证,则检查本地缓存以查看它是否足够新.

    一个.如果缓存不是陈旧的,那么它从缓存中提取数据

    湾 如果数据是陈旧的,那么它将从源重新验证

这里:

NSURLRequest实例的默认缓存策略是NSURLRequestUseProtocolCachePolicy.NSURLRequestUseProtocolCachePolicy行为是特定于协议的,并且被定义为协议的最佳符合策略

这里:

如果请求不存在NSCachedURLResponse,则从原始源获取数据.如果请求的缓存响应,则URL加载系统会检查响应以确定它是否指定必须重新验证内容.如果必须重新验证内容,则会与原始源建立连接以查看其是否已更改.如果它没有更改,则从本地缓存返回响应.如果已更改,则从原始源获取数据.

如果缓存的响应未指定必须重新验证内容,则检查响应中指定的最大期限或到期时间.如果缓存的响应足够新,则从本地缓存返回响应.如果确定响应是陈旧的,则检查原始源是否有更新的数据.如果有更新的数据,则从原始源获取数据,否则从缓存返回.

此处列出的其他选项.


小智 0

它曾经在我重新启动我的应用程序后执行新的请求。通过重新启动,我通过按两次主页按钮来完成此操作,该按钮显示正在运行的应用程序列表,杀死我的应用程序并通过单击应用程序图标再次重新启动。

如果您愿意,也可以禁用缓存。重写 NSURLProtocol 委托的此方法

//禁用缓存,因为我们的文件存储在多个服务器中,错误响应缓存可能会导致问题。

-(NSCachedURLResponse *)connection:(NSURLConnection *)connection
                 willCacheResponse:(NSCachedURLResponse *)cachedResponse
{
    NSCachedURLResponse *newCachedResponse = cachedResponse;

    //if ([[[[cachedResponse response] URL] scheme] isEqual:@"https"]) 
    {
        newCachedResponse = nil;
    } 
    return newCachedResponse;
}
Run Code Online (Sandbox Code Playgroud)