菜鸟教程小白 发表于 2022-12-11 18:53:25

ios - 带有私有(private) Cache-Control 和 max-age 的 Alamofire/NSURLSession 缓存


                                            <p><p>我不确定我是否做错了什么,但是在设置 <code>urlRequest.cachePolicy = .useProtocolCachePolicy</code> 并将缓存头设置为私有(private)时,缓存不起作用 max-age <code>"Cache-Control"= "private, max-age=86400";</code></p>

<p>应该 useProtocolCachePolicy 与 private 一起使用吗?还是我需要手动将其覆盖为公开?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我尝试了以下对我来说效果很好的代码,
使用 cachePolicy:NSURLRequestUseProtocolCachePolicy。</p>

<p>它根据http头响应中的cache-control/max-age使缓存过期:</p>

<p>我使用了这个有用的 <a href="https://www.mobfox.com/blog/handling-nsurlsession-caching-bug/" rel="noreferrer noopener nofollow">blog</a> </p>

<p>这是我使用的代码:</p>

<pre><code>NSURL * url = ;

NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:url
      cachePolicy:NSURLRequestUseProtocolCachePolicy
      timeoutInterval:60.0
    ];

    if (self.session == nil) {
      NSURLSessionConfiguration * config = ;
      self.session = ;
    }
    NSURLSessionDataTask *task = [self.session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

      if (error != nil) {
            NSLog(@&#34;task transport error %@ / %d&#34;, error.domain, (int) error.code);
            return;
      }

      NSHTTPURLResponse * httpResponse = (NSHTTPURLResponse*) response;
      NSLog(@&#34;task finished with status %d, bytes %zu&#34;, (int) httpResponse.statusCode, (size_t) data.length);

      NSDictionary * headers = httpResponse.allHeaderFields;
      NSLog(@&#34;response-headers %@&#34;,headers);
    }];

    ;
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 带有私有(private) Cache-Control 和 max-age 的 Alamofire/NSURLSession 缓存,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/46544473/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/46544473/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 带有私有(private) Cache-Control 和 max-age 的 Alamofire/NSURLSession 缓存