当服务器返回HTTP_NOT_MODIFIED时,httpUrlConnection不返回缓存响应

时间:2014-03-10 09:12:34

标签: android httpurlconnection httpresponsecache

我有一个api请求,它返回响应以及响应头Last-Modified和Date。 我正在使用HttpUrlConnection来发出HTTP.GET请求。我也使用HttpResponseCache来缓存响应。

当服务器返回响应代码200时,缓存响应。我现在面临两个问题。

第一次:当第二次请求api时,HttpUrlConnection将“Date”标头的值设置为“If-Modified-Since”标头,而不是使用“Last-Modified”标头的值

我通过从缓存的响应中手动设置If-Modified-Since标头来解决此问题。所以现在服务器在第二次请求api时返回304。

这是我的第二个问题。

第二:通常,如果服务器返回304并且响应被缓存,则HttpUrlConnection返回缓存的响应,响应代码将为200.在具有ETag头的api响应的情况下,这可以正常工作在回应中。但对于仅具有Last-Modified标头的响应,HttpUrlConnection将响应代码返回为304本身,并且不返回缓存的响应。

有没有人遇到过类似的问题?

请在下面找到api请求的java实现。

URL url = new URL(this.url);
HttpURLConnection conn  = getProtocolType(url);
conn.setRequestMethod("GET");
conn.setReadTimeout(timeOut);
conn.setConnectTimeout(timeOut);
conn.setInstanceFollowRedirects(true);
conn.setRequestProperty("User-Agent", this.userAgent);
conn.setRequestProperty("Cache-Control", "max-age=0");
conn.setUseCaches(true);
conn.setDefaultUseCaches(true);
conn.connect();
this.responseCode = conn.getResponseCode();

0 个答案:

没有答案