安卓

OkHttp 精讲:CacheInterceptor

2020-09-07  本文已影响0人  Android轮子哥

上一篇:OkHttp 精讲:BridgeInterceptor

源码解析

名称 说明 示例
Date 请求发送的日期和时间 Date: Tue, 15 Nov 2010 08:12:31 GMT
Expires 响应过期的日期和时间 Expires: Thu, 01 Dec 2010 16:00:00 GMT
Last-Modified 请求资源的最后修改时间 Last-Modified: Tue, 15 Nov 2010 12:45:26 GMT
ETag 请求变量的实体标签的当前值 ETag: “737060cd8c284d8af7ad3082f209582d”
Age 从原始服务器到代理缓存形成的估算时间(以秒计,非负) Age: 12
名称 说明
no-cache 数据不能缓存,每次请求都重新访问服务器
no-store 不仅不能使用缓存,就连暂存到临时文件夹下都不行
public 可以被任何缓存区缓存,如客户端、代理服务器等
private 这个请求返回的数据只能在客户端中缓存
max-age=60 缓存过期时间,以秒作为时间单位
only-if-cached 客户端请求使用缓存数据,如果服务器返回 304 代表允许
响应码 描述
304 如果客户端发送了一个带条件的 GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个状态码。304响应禁止包含消息体,因此始终以消息头后的第一个空行结尾。   该响应必须包含以下的头信息:   Date,除非这个服务器没有时钟。假如没有时钟的服务器也遵守这些规则,那么代理服务器以及客户端可以自行将 Date 字段添加到接收到的响应头中去(正如RFC 2068中规定的一样),缓存机制将会正常工作。   ETag 和/或 Content-Location,假如同样的请求本应返回200响应。   Expires, Cache-Control,和/或Vary,假如其值可能与之前相同变量的其他响应对应的值不同的话。   假如本响应请求使用了强缓存验证,那么本次响应不应该包含其他实体头;否则(例如,某个带条件的 GET 请求使用了弱缓存验证),本次响应禁止包含其他实体头;这避免了缓存了的实体内容和更新了的实体头信息之间的不一致。   假如某个304响应指明了当前某个实体没有缓存,那么缓存系统必须忽视这个响应,并且重复发送不包含限制条件的请求。   假如接收到一个要求更新某个缓存条目的304响应,那么缓存系统必须更新整个条目以反映所有在响应中被更新的字段的值。

源码总结

下一篇:OkHttp 精讲:ConnectInterceptor

Android 技术分享Q群:78797078

上一篇 下一篇

猜你喜欢

热点阅读