NSURLCache 会将数据缓存到沙盒路径下的Library/Caches 中,通过请求的url+参数来作为key储存的
Http 缓存流程
缓存是否过期 根据服务器端返回的 max-age判断的, 影响的是下一次网络请求
处理http cache的优先级:
先判断资源是否命中强缓存,命中则直接从disk里拿到资源;
如果没有命中强缓存,判断是否命中协商缓存,命中则走协商缓存;
如果命中了协商缓存,会发起请求,服务端根据Request Header里的If-None-Match(对应Etag)和If-Modified-Since(对应Last-Modified)判断资源是否过期,没过期则返回304状态码,浏览器依旧用disk里的资源。如果资源过期,则服务端会返回新的资源;
如果也没有命中协商缓存,则这个请求不走缓存策略,发起真实的请求,从服务端拿资源
Cache-Control在请求头和响应头里的区别
请求头里的Cache-Control影响的是当前这一次请求
响应头里的Cache-Control是告诉浏览器这样存储,下次依照这样来。影响的是下一次请求
Cache-Control:max-age=0 这个值表示,这个请求按照协商缓存的规则走,一定会发出真实的请求。这里和响应头里的max-age=0有不同
Cache-Control:no-cache 表示这次或下次请求不会读缓存资源,即便缓存没有过期,或者资源并没有修改
缓存:控制客户端访问数据方式
服务器设置Cache-Control:max-age=5000 控制客户端请求数据从获取缓存取还是服务器数据库取