GET 缓存导致的问题
在iOS 客户端通过AFNetworking 发起 GET 方式的HTTP请求时,导致数据始终不是最新的,即使断开网络连接,依旧能获取到response,原因就是其对GET 方式进行了缓存。
HTTP缓存
HTTP缓存的基本目的就是使应用执行的更快,更易扩展,但是HTTP缓存通常只适用于idempotent request(可以理解为查询请求,也就是不更新服务端数据的请求),这也就导致了在HTTP的世界里,一般都是对GET请求做缓存,POST请求很少有缓存。
GET多用来直接获取数据,不修改数据,主要目的就是database的search语句的感觉。用缓存(有个代理服务器的概念)的目的就是查db的速度变快。
POST则是发送数据到服务器端去存储。类似db里的update delete和insert语句的感觉。更新db的意思。数据必须放在数据库,所以一般都得去访问服务器端,而极少需要缓存。
解决GET 缓存的七种方式
-
1.服务端处理,在response的 header 中添加
@{@"Cache-Control": @"no-cache, must-reva lidate"}
; -
2.客户端在header中添加
@{@"If-Modified-Since": @"0"}
-
3.客户端在header中添加
@{@"Cache-Control": @"no-cache"}
, -
4.客户端在GET请求的url中添加参数
@{@"timestamp": @([[NSDate date] timeIntervalSince1970]}
-
6.用POSET替换GET请求
-
7.iOS 可以通过使用
[NSURLSessionConfiguration ephemeralSessionConfiguration]
忽略缓存,如果使用的基于NSURLSession的网络请求,比如AFNetworking:
// 忽略缓存
NSURLSessionConfiguration *config = [NSURLSessionConfiguration ephemeralSessionConfiguration];
AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc]initWithSessionConfiguration:config];
网友评论