2016-02-05 1 views
3

J'utilise OkHttpClient (v3.0.1) qui est dans ma demande, mais ETag etComment utiliser ETag de OkHttp et If-None-Match sur Android

If-None-Match ne fonctionnent pas, par exemple:.

Première GET http://112.4.19.67/task/imags_avatar/20130607165126605.png

En réponse, je reçois ETag et Last-Modified.

Demande:

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 

Réponse:

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 

Deuxième obtenir la même URL: http://112.4.19.67/task/imags_avatar/20130607165126605.png

Je pense que je pouvais voir le If-None-Match demande. mais ça n'existe pas.

Demande:

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 

Réponse:

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 

Mon 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(); 

Merci à l'avance pour toute aide.

+0

Votre code semble bien. Essayez de renifler la requête avec les paramètres de proxy en utilisant un logiciel comme mitmproxy ou charlesproxy car retroger logcat n'imprime pas l'en-tête if-none-match bien que okhttp ajoute déjà l'en-tête. Une autre chose est la retrofit imprime le code d'état 304 comme 200. – baskara

Répondre

0

Lisez-vous le corps complet de la réponse dès la première demande? OkHttp n'écrit pas la réponse au cache tant que vous n'avez pas fini de lire le corps.