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

Dee*_*nan 5 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();
Run Code Online (Sandbox Code Playgroud)