You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SDWebImageSwiftUI中Cache-Control头与maxDiskAge的缓存优先级问题

SDWebImageSwiftUI 缓存规则:本地配置 vs HTTP头 max-age

你在AppDelegate中设置的这段本地缓存配置:

// Set the image cache expiration to one day.
SDImageCache.shared.config.maxDiskAge = 60 * 60 * 24
// 250 MB
SDImageCache.shared.config.maxDiskSize = 250 * 1024 * 1024

SDWebImage会同时参考这个本地配置和HTTP响应头的Cache-Control max-age,但两者的作用场景不同,不存在单纯的优先级覆盖:

  • HTTP头的max-age负责判断缓存的「新鲜度」:如果缓存文件的存储时间未超过max-age指定的时长,会直接使用缓存无需发起新请求;一旦超过这个时长,会发起条件验证请求(如携带If-Modified-Since),确认资源是否更新后再决定使用缓存还是新资源。这个规则是判断缓存是否可直接复用的核心依据。
  • 本地设置的maxDiskAge负责限制缓存的「磁盘留存时长」:这是磁盘缓存文件的最大保存期限,不管HTTP头的规则如何,只要缓存文件在磁盘上存储的时间超过1天(你设置的60*60*24秒),SDWebImage在执行缓存清理时就会将其删除,该缓存文件后续无法再被使用。

举两个实际场景理解:

  • 若HTTP头max-age设为7天,本地maxDiskAge设为1天:缓存文件在1天后就会被清理,根本无法达到7天的新鲜期;
  • 若HTTP头max-age设为1天,本地maxDiskAge设为7天:缓存1天后会被判定为不新鲜,需要验证资源是否更新,但缓存文件会在磁盘上保留7天才被删除。

另外你设置的maxDiskSize是磁盘缓存的总容量上限,当缓存总大小超过250MB时,SDWebImage会按照文件最后访问时间,优先删除最久未使用的缓存文件,这是和时间规则互补的缓存清理逻辑。


内容的提问来源于stack exchange,提问作者PH Celos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 23:15:13