HTTP缓存机制

在移动互联网时代,为了尽可能的为用户节省流程以及提高用户体验,对HTTP请求设计缓存机制是必不可少的,当前主流缓存策略有以下几种:

  • 系统缓存
    iOS系统为NSURLRequest提供了多种缓存策略,可以通过设置cachePolicy来设置请求的缓存策略
  1. NSURLRequestUseProtocolCachePolicy // 默认的缓存策略(取决于协议)
    这个是默认的缓存机制,当系统第一次请求该网络资源的时候,本地缓存中并不存在该资源文件,于是请求了整个资源文件,并且缓存该文件的缓存信息。
    当第二次请求该网络资源的时候,系统会在请求头中添加"if-Modified-Since"字段或者”if-None-Match“字段,将缓存信息携带上去,服务端根据缓存信息判断该资源是否发生了变化,如果没有变化,则返回304。
  2. NSURLRequestReloadIgnoringLocalCacheData
    该策略在每次请求资源时都会忽略本地的缓存内容,去请求最新的资源。
  3. NSURLRequestReloadIgnoringLocalAndRemoteCacheData // 未实现
  4. NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData
    忽略缓存,重新请求
  5. NSURLRequestReturnCacheDataElseLoad
    有缓存就用缓存,没有缓存就重新请求
  6. NSURLRequestReturnCacheDataDontLoad
    该策略有缓存就适应缓存,没有缓存就不发请求,当做请求出错处理。当本地并不存在对应的缓存资源时,回调接口就会报错,错误码-1008
  7. NSURLRequestReloadRevalidatingCacheData // 未实现

iOS 系统使用NSURLCache单例类来管理网络请求的缓存。对于app来说,由于使用了同一个缓存对象来管理缓存,所以不同的网络请求都是使用同一个缓存来管理的。

  • 客户端缓存
    有时候系统的缓存策略不能满足客户端需求的时候,需要自己去做一些缓存处理,我们大概是这么设计的。
    在本地创建一个数据库,存储某个请求的最后一次缓存。在调用这个请求的时候,有一个cacheCompletion和requestCompletion,前者用于回调最近一次成功请求的缓存,后者用于回调真实请求的数据,用于解决网络接口请求慢导致不显示的问题。
  • CDN缓存
    请求大资源的一些CDN服务器会做一个本地缓存,如果缓存没有过期,则直接返回缓存的数据。如果缓存过期,在向源节点请求数据。
  • 服务器缓存
    主要是通过服务端redis缓存等机制实现的

你可能感兴趣的:(HTTP缓存机制)