Ich habe eine lange Diskussion über dieses Thema gesehen und es wird behauptet, dass es in 2.3.0 behoben sei. Hier ist die Kombination, die ich verwende
%Vor%Protokolle sehe ich gegen empfangene Antwort, habe Etag; aber nachfolgende Anfrage habe ich nicht If-None-Match in seiner Kopfzeile übergeben. Ich habe es getestet, indem ich If-None-Match explizit durch meinen Code eingefügt habe, Caching funktioniert und Antwort wurde erwartet. Es ist also sicher etwas falsch mit der Version der Bibliotheken, die ich benutze oder etwas nicht gut über meinen Code.
Hier richte ich okClient ein.
%Vor%Mein Header-Interceptor enthält die Logik, die ziemlich genau auf meine API selbst ausgerichtet ist. Hier ist es
%Vor%Und hier ist die Methode, mit der ich Cache lege.
%Vor%Ich suche nach einer schnellen und effektiven Antwort, da ich bereits eine vernünftige Zeit damit verbracht habe, die Lösung zu finden, aber kein Glück.
Danke
Ihr Code scheint zu funktionieren, ich habe es noch nicht ausprobiert, aber vor ein paar Wochen stand ich vor demselben Problem. Es stellte sich heraus, dass es wegen des Logs von Retrofit nicht den if-none-match-Header zeigte. Aber als ich versuchte, die Anfrage mit Proxy abzufangen und die Anfrage zuerst an meinen Laptop umzuleiten (ich benutzte mitmproxy
app), erschien der if-none-match-Header.
Wie auch immer, wenn Sie /okhttp3/internal/http/CacheStrategy.java
in dieser Methode private CacheStrategy getCandidate()
betrachten, werden Sie sehen, dass OkHttp3 tatsächlich das Etag & amp; if-none-match header korrekt.
Ich hoffe, dies verdeutlicht.