3

I use OkHttpClient (v3.0.1) which is in my application,but ETag and If-None-Match are not working。

For example:

First GET http://112.4.19.67/task/imags_avatar/20130607165126605.png

In Response, I get ETag and Last-Modified.

Request:

GET /task/imags_avatar/20130607165126605.png HTTP/1.1
Host: 112.4.19.67
Connection: Keep-Alive
Accept-Encoding: gzip
User-Agent: okhttp/3.0.1

Response:

HTTP/1.1 200 OK
Server: Apache
Last-Modified: Mon, 30 Jun 2014 04:44:43 GMT
ETag: "1205-4fd06515d9572"
Content-Type: image/png
Content-Length: 4613
Accept-Ranges: bytes
Date: Thu, 04 Feb 2016 13:30:05 GMT
X-Varnish: 3684240013 3683622711
Age: 1313
Via: 1.1 varnish
Connection: keep-alive

Second GET the same url : http://112.4.19.67/task/imags_avatar/20130607165126605.png

I think that I could see the If-None-Match in request. but it doesn't exist.

Request:

GET /task/imags_avatar/20130607165126605.png HTTP/1.1
Host: 112.4.19.67
Connection: Keep-Alive
Accept-Encoding: gzip
User-Agent: okhttp/3.0.1

Response:

HTTP/1.1 200 OK
Server: Apache
Last-Modified: Mon, 30 Jun 2014 04:44:43 GMT
ETag: "1205-4fd06515504c0"
Content-Type: image/png
Content-Length: 4613
Accept-Ranges: bytes
Date: Thu, 04 Feb 2016 13:30:26 GMT
X-Varnish: 3389168698 3388862573
Age: 642
Via: 1.1 varnish
Connection: keep-alive

My Code

    File file = getCacheDir();
    Cache cache = new Cache(file, CACHE_SIZE);

    OkHttpClient.Builder builder = new OkHttpClient.Builder();
    builder.cache(cache);
    OkHttpClient client = builder.build();

    Request request = new Request.Builder()
            .url(url)
            .build();

Thanks in advance for any help.

  • Your code seems fine. Try to sniff the request with proxy settings by using a software like mitmproxy or charlesproxy because retrofit logcat doesn't print if-none-match header although okhttp already adds the header. Another thing is retrofit prints 304 status code as 200. – baskara Aug 29 '16 at 06:43

1 Answers1

0

Are you reading the complete response body from the first request? OkHttp doesn't write the response to the cache until you finish reading the body.

Jesse Wilson
  • 39,078
  • 8
  • 121
  • 128