Java Code Examples for com.lzy.okgo.cache.CacheMode#DEFAULT
The following examples show how to use
com.lzy.okgo.cache.CacheMode#DEFAULT .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: HeaderParser.java From okhttp-OkGo with Apache License 2.0 | 4 votes |
/** * 根据请求结果生成对应的缓存实体类,以下为缓存相关的响应头 * Cache-Control: public 响应被缓存,并且在多用户间共享 * Cache-Control: private 响应只能作为私有缓存,不能在用户之间共享 * Cache-Control: no-cache 提醒浏览器要从服务器提取文档进行验证 * Cache-Control: no-store 绝对禁止缓存(用于机密,敏感文件) * Cache-Control: max-age=60 60秒之后缓存过期(相对时间),优先级比Expires高 * Date: Mon, 19 Nov 2012 08:39:00 GMT 当前response发送的时间 * Expires: Mon, 19 Nov 2012 08:40:01 GMT 缓存过期的时间(绝对时间) * Last-Modified: Mon, 19 Nov 2012 08:38:01 GMT 服务器端文件的最后修改时间 * ETag: "20b1add7ec1cd1:0" 服务器端文件的ETag值 * 如果同时存在cache-control和Expires,浏览器总是优先使用cache-control * * @param responseHeaders 返回数据中的响应头 * @param data 解析出来的数据 * @param cacheMode 缓存的模式 * @param cacheKey 缓存的key * @return 缓存的实体类 */ public static <T> CacheEntity<T> createCacheEntity(Headers responseHeaders, T data, CacheMode cacheMode, String cacheKey) { long localExpire = 0; // 缓存相对于本地的到期时间 if (cacheMode == CacheMode.DEFAULT) { long date = HttpHeaders.getDate(responseHeaders.get(HttpHeaders.HEAD_KEY_DATE)); long expires = HttpHeaders.getExpiration(responseHeaders.get(HttpHeaders.HEAD_KEY_EXPIRES)); String cacheControl = HttpHeaders.getCacheControl(responseHeaders.get(HttpHeaders.HEAD_KEY_CACHE_CONTROL), responseHeaders.get(HttpHeaders.HEAD_KEY_PRAGMA)); //没有缓存头控制,不需要缓存 if (TextUtils.isEmpty(cacheControl) && expires <= 0) return null; long maxAge = 0; if (!TextUtils.isEmpty(cacheControl)) { StringTokenizer tokens = new StringTokenizer(cacheControl, ","); while (tokens.hasMoreTokens()) { String token = tokens.nextToken().trim().toLowerCase(Locale.getDefault()); if (token.equals("no-cache") || token.equals("no-store")) { //服务器指定不缓存 return null; } else if (token.startsWith("max-age=")) { try { //获取最大缓存时间 maxAge = Long.parseLong(token.substring(8)); //服务器缓存设置立马过期,不缓存 if (maxAge <= 0) return null; } catch (Exception e) { OkLogger.printStackTrace(e); } } } } //获取基准缓存时间,优先使用response中的date头,如果没有就使用本地时间 long now = System.currentTimeMillis(); if (date > 0) now = date; if (maxAge > 0) { // Http1.1 优先验证 Cache-Control 头 localExpire = now + maxAge * 1000; } else if (expires >= 0) { // Http1.0 验证 Expires 头 localExpire = expires; } } else { localExpire = System.currentTimeMillis(); } //将response中所有的头存入 HttpHeaders,原因是写入数据库的对象需要实现序列化,而ok默认的Header没有序列化 HttpHeaders headers = new HttpHeaders(); for (String headerName : responseHeaders.names()) { headers.put(headerName, responseHeaders.get(headerName)); } //构建缓存实体对象 CacheEntity<T> cacheEntity = new CacheEntity<>(); cacheEntity.setKey(cacheKey); cacheEntity.setData(data); cacheEntity.setLocalExpire(localExpire); cacheEntity.setResponseHeaders(headers); return cacheEntity; }
Example 2
Source File: HeaderParser.java From BaseProject with Apache License 2.0 | 4 votes |
/** * 根据请求结果生成对应的缓存实体类,以下为缓存相关的响应头 * Cache-Control: public 响应被缓存,并且在多用户间共享 * Cache-Control: private 响应只能作为私有缓存,不能在用户之间共享 * Cache-Control: no-cache 提醒浏览器要从服务器提取文档进行验证 * Cache-Control: no-store 绝对禁止缓存(用于机密,敏感文件) * Cache-Control: max-age=60 60秒之后缓存过期(相对时间),优先级比Expires高 * Date: Mon, 19 Nov 2012 08:39:00 GMT 当前response发送的时间 * Expires: Mon, 19 Nov 2012 08:40:01 GMT 缓存过期的时间(绝对时间) * Last-Modified: Mon, 19 Nov 2012 08:38:01 GMT 服务器端文件的最后修改时间 * ETag: "20b1add7ec1cd1:0" 服务器端文件的ETag值 * 如果同时存在cache-control和Expires,浏览器总是优先使用cache-control * * @param responseHeaders 返回数据中的响应头 * @param data 解析出来的数据 * @param cacheMode 缓存的模式 * @param cacheKey 缓存的key * @return 缓存的实体类 */ public static <T> CacheEntity<T> createCacheEntity(Headers responseHeaders, T data, CacheMode cacheMode, String cacheKey) { long localExpire = 0; // 缓存相对于本地的到期时间 if (cacheMode == CacheMode.DEFAULT) { long date = HttpHeaders.getDate(responseHeaders.get(HttpHeaders.HEAD_KEY_DATE)); long expires = HttpHeaders.getExpiration(responseHeaders.get(HttpHeaders.HEAD_KEY_EXPIRES)); String cacheControl = HttpHeaders.getCacheControl(responseHeaders.get(HttpHeaders.HEAD_KEY_CACHE_CONTROL), responseHeaders.get(HttpHeaders.HEAD_KEY_PRAGMA)); //没有缓存头控制,不需要缓存 if (TextUtils.isEmpty(cacheControl) && expires <= 0) return null; long maxAge = 0; if (!TextUtils.isEmpty(cacheControl)) { StringTokenizer tokens = new StringTokenizer(cacheControl, ","); while (tokens.hasMoreTokens()) { String token = tokens.nextToken().trim().toLowerCase(Locale.getDefault()); if (token.equals("no-cache") || token.equals("no-store")) { //服务器指定不缓存 return null; } else if (token.startsWith("max-age=")) { try { //获取最大缓存时间 maxAge = Long.parseLong(token.substring(8)); //服务器缓存设置立马过期,不缓存 if (maxAge <= 0) return null; } catch (Exception e) { OkLogger.printStackTrace(e); } } } } //获取基准缓存时间,优先使用response中的date头,如果没有就使用本地时间 long now = System.currentTimeMillis(); if (date > 0) now = date; if (maxAge > 0) { // Http1.1 优先验证 Cache-Control 头 localExpire = now + maxAge * 1000; } else if (expires >= 0) { // Http1.0 验证 Expires 头 localExpire = expires; } } else { localExpire = System.currentTimeMillis(); } //将response中所有的头存入 HttpHeaders,原因是写入数据库的对象需要实现序列化,而ok默认的Header没有序列化 HttpHeaders headers = new HttpHeaders(); for (String headerName : responseHeaders.names()) { headers.put(headerName, responseHeaders.get(headerName)); } //构建缓存实体对象 CacheEntity<T> cacheEntity = new CacheEntity<>(); cacheEntity.setKey(cacheKey); cacheEntity.setData(data); cacheEntity.setLocalExpire(localExpire); cacheEntity.setResponseHeaders(headers); return cacheEntity; }
Example 3
Source File: HeaderParser.java From okhttp-OkGo with Apache License 2.0 | 3 votes |
/** * 对每个请求添加默认的请求头,如果有缓存,并返回缓存实体对象 * Cache-Control: max-age=0 以秒为单位 * If-Modified-Since: Mon, 19 Nov 2012 08:38:01 GMT 缓存文件的最后修改时间。 * If-None-Match: "0693f67a67cc1:0" 缓存文件的ETag值 * Cache-Control: no-cache 不使用缓存 * Pragma: no-cache 不使用缓存 * Accept-Language: zh-CN,zh;q=0.8 支持的语言 * User-Agent: 用户代理,它的信息包括硬件平台、系统软件、应用软件和用户个人偏好 * Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36 * * @param request 请求类 * @param cacheEntity 缓存实体类 * @param cacheMode 缓存模式 */ public static <T> void addCacheHeaders(Request request, CacheEntity<T> cacheEntity, CacheMode cacheMode) { //1. 按照标准的 http 协议,添加304相关请求头 if (cacheEntity != null && cacheMode == CacheMode.DEFAULT) { HttpHeaders responseHeaders = cacheEntity.getResponseHeaders(); if (responseHeaders != null) { String eTag = responseHeaders.get(HttpHeaders.HEAD_KEY_E_TAG); if (eTag != null) request.headers(HttpHeaders.HEAD_KEY_IF_NONE_MATCH, eTag); long lastModified = HttpHeaders.getLastModified(responseHeaders.get(HttpHeaders.HEAD_KEY_LAST_MODIFIED)); if (lastModified > 0) request.headers(HttpHeaders.HEAD_KEY_IF_MODIFIED_SINCE, HttpHeaders.formatMillisToGMT(lastModified)); } } }
Example 4
Source File: HeaderParser.java From BaseProject with Apache License 2.0 | 3 votes |
/** * 对每个请求添加默认的请求头,如果有缓存,并返回缓存实体对象 * Cache-Control: max-age=0 以秒为单位 * If-Modified-Since: Mon, 19 Nov 2012 08:38:01 GMT 缓存文件的最后修改时间。 * If-None-Match: "0693f67a67cc1:0" 缓存文件的ETag值 * Cache-Control: no-cache 不使用缓存 * Pragma: no-cache 不使用缓存 * Accept-Language: zh-CN,zh;q=0.8 支持的语言 * User-Agent: 用户代理,它的信息包括硬件平台、系统软件、应用软件和用户个人偏好 * Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36 * * @param request 请求类 * @param cacheEntity 缓存实体类 * @param cacheMode 缓存模式 */ public static <T> void addCacheHeaders(Request request, CacheEntity<T> cacheEntity, CacheMode cacheMode) { //1. 按照标准的 http 协议,添加304相关请求头 if (cacheEntity != null && cacheMode == CacheMode.DEFAULT) { HttpHeaders responseHeaders = cacheEntity.getResponseHeaders(); if (responseHeaders != null) { String eTag = responseHeaders.get(HttpHeaders.HEAD_KEY_E_TAG); if (eTag != null) request.headers(HttpHeaders.HEAD_KEY_IF_NONE_MATCH, eTag); long lastModified = HttpHeaders.getLastModified(responseHeaders.get(HttpHeaders.HEAD_KEY_LAST_MODIFIED)); if (lastModified > 0) request.headers(HttpHeaders.HEAD_KEY_IF_MODIFIED_SINCE, HttpHeaders.formatMillisToGMT(lastModified)); } } }