NSURLRequestReloadIgnoringLocalCacheData 不起作用

问题描述 投票:0回答:4

我的代码看起来像

if([[self cache] isEqualToNumber:[[NSNumber alloc] initWithInt:1]])
{
    [[NSURLCache sharedURLCache] setDiskCapacity:4 * 1024 * 1024];
    [[NSURLCache sharedURLCache] setMemoryCapacity:32 * 1024 * 1024];
    [self setRequestObj:[NSURLRequest requestWithURL:loadUrl cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]];
}
else [self setRequestObj:[NSURLRequest requestWithURL:loadUrl cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60.0]];

我的其他部分不起作用。为什么我的

UIWebView
不忽略我的本地缓存?

每次我访问测试站点时,我的应用程序都不会从原始源加载。他只加载index.html,但仅在第一次访问时加载链接的图像。

我的问题是什么?

ios uiwebview nsurlrequestcachepolicy
4个回答
0
投票

NSURLRequestReloadIgnoringLocalCacheData 标志仅影响该请求,而不影响未来的请求。所以这按预期工作。如果你想禁用其他缓存,我知道的唯一方法是实现一个 NSURLProtocol 来拦截 HTTP/HTTPS 请求,以可识别的方式修改它们(例如添加自定义标头),然后重新发送它们。这不适合胆小的人。

您可能最好只清除缓存:如何清除 UIWebView 缓存?


0
投票

我遇到了同样的问题,我认为这可能是 UIWebView 的错误。因为我改了WKWebView后,NSURLRequestReloadIgnoringLocalCacheData就可以工作了!


0
投票

很多年后 - 我相信最新的 iOS 有一个错误,现在甚至忽略了 NSURLRequestReloadIgnoringLocalCacheData 的正确一次性使用。我通过向 URL 请求添加额外的字符来解决这个问题,这些字符将被服务器忽略,但这使得每个 URL 请求都是唯一的。


0
投票

如果

NSURLRequestReloadIgnoringLocalCacheData
似乎不起作用,可能有多种原因导致其行为不符合预期:

  1. 不正确的用法:确保您在代码中正确使用
    NSURLRequestReloadIgnoringLocalCacheData
    。它应该在创建
    NSURLRequest
    对象时设置为缓存策略,如下所示:
let request = URLRequest(url: yourURL, cachePolicy: .reloadIgnoringLocalCacheData, timeoutInterval: yourTimeoutInterval)
  1. 其他级别的缓存:如果您的请求仍在缓存,则缓存可能发生在不同的级别,例如在网络层或服务器本身。检查这些级别的任何缓存机制并根据需要进行调整。

  2. 服务器端缓存控制:即使您指定

    NSURLRequestReloadIgnoringLocalCacheData
    ,服务器仍可能通过
    Cache-Control
    Expires
    等响应标头强制缓存。确保服务器的缓存指令符合您所需的行为。

  3. 测试环境:确保您在适用缓存的环境中进行测试。例如,如果您使用本地服务器或流量最小的服务器进行测试,则可能不容易观察到缓存行为。

  4. 网络层实现:如果您使用网络库或框架,请确保它不会覆盖您在

    NSURLRequest
    级别设置的缓存策略。一些网络库有自己的缓存机制,可能会干扰您所需的行为。

  5. 清除现有缓存:如果请求存在现有缓存数据,尽管指定了

    NSURLRequestReloadIgnoringLocalCacheData
    ,但仍可能提供服务。在发出请求之前尝试清除缓存,以确保您从干净的状态开始。

通过调查这些潜在问题,您应该能够诊断

NSURLRequestReloadIgnoringLocalCacheData
在您的场景中未按预期工作的原因,并进行必要的调整以使其正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.