diff options
author | Ralph Bergmann <ralph@the4thfloor.eu> | 2014-10-08 20:30:34 +0200 |
---|---|---|
committer | Ficus Kirkpatrick <ficus@android.com> | 2015-02-15 09:34:49 -0800 |
commit | 8e33d93dc1aae9bb9dbde3b80af8a76ba28f0e19 (patch) | |
tree | fc17378b2024f91eed2c9f70a77404c8c6528cfe /src/main/java/com/android/volley/toolbox | |
parent | 0cc8d620fe12412f90ba5121bdffb1a4e2f032c2 (diff) | |
download | volley-8e33d93dc1aae9bb9dbde3b80af8a76ba28f0e19.tar.gz |
Adds Cache-Control "stale-while-revalidate"
Adds Cache-Control "stale-while-revalidate" header parsing for better
server side cache entry expire setup.
see:
https://www.mnot.net/blog/2007/12/12/stale
http://tools.ietf.org/html/rfc5861
https://groups.google.com/a/chromium.org/forum/m/#!msg/chromium-dev/zchogDvIYrY/ZqWSdt3LJdMJ
Signed-off-by: Ralph Bergmann <ralph@the4thfloor.eu>
Change-Id: I1b7baf9997d3a8a251d21631a11deb503e3a7461
Diffstat (limited to 'src/main/java/com/android/volley/toolbox')
-rw-r--r-- | src/main/java/com/android/volley/toolbox/HttpHeaderParser.java | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/main/java/com/android/volley/toolbox/HttpHeaderParser.java b/src/main/java/com/android/volley/toolbox/HttpHeaderParser.java index e342c9e..da04490 100644 --- a/src/main/java/com/android/volley/toolbox/HttpHeaderParser.java +++ b/src/main/java/com/android/volley/toolbox/HttpHeaderParser.java @@ -45,7 +45,9 @@ public class HttpHeaderParser { long lastModified = 0; long serverExpires = 0; long softExpire = 0; + long finalExpire = 0; long maxAge = 0; + long staleWhileRevalidate = 0; boolean hasCacheControl = false; String serverEtag = null; @@ -69,6 +71,11 @@ public class HttpHeaderParser { maxAge = Long.parseLong(token.substring(8)); } catch (Exception e) { } + } else if (token.startsWith("stale-while-revalidate=")) { + try { + staleWhileRevalidate = Long.parseLong(token.substring(23)); + } catch (Exception e) { + } } else if (token.equals("must-revalidate") || token.equals("proxy-revalidate")) { maxAge = 0; } @@ -91,16 +98,18 @@ public class HttpHeaderParser { // is more restrictive. if (hasCacheControl) { softExpire = now + maxAge * 1000; + finalExpire = softExpire + staleWhileRevalidate * 1000; } else if (serverDate > 0 && serverExpires >= serverDate) { // Default semantic for Expire header in HTTP specification is softExpire. softExpire = now + (serverExpires - serverDate); + finalExpire = softExpire; } Cache.Entry entry = new Cache.Entry(); entry.data = response.data; entry.etag = serverEtag; entry.softTtl = softExpire; - entry.ttl = entry.softTtl; + entry.ttl = finalExpire; entry.serverDate = serverDate; entry.lastModified = lastModified; entry.responseHeaders = headers; |