Mein Browser zeigt weiterhin die zwischengespeicherte Seite an, obwohl im Antwortheader „No-Cache, No-Store, Must-Revalate“ vom Server gesendet wird.

Mein Browser zeigt weiterhin die zwischengespeicherte Seite an, obwohl im Antwortheader „No-Cache, No-Store, Must-Revalate“ vom Server gesendet wird.

Der Inhalt unserer Seiten ändert sich ständig und daher möchten wir nicht, dass der Browser die Seite zwischenspeichert oder zwischengespeicherte Seiten oder unsere Benutzer anzeigt. Aber der Browser zeigt weiterhin zwischengespeicherte Seiten an, obwohl er im Antwortheader „No-Cache, No-Store, Must-Revalidate“ vom Server sendet. Das ist wirklich frustrierend. Wir haben Tausende von Benutzern und sie alle lesen alte Nachrichten!!!

Wir verwenden eine clientseitige JS-Vorlage (Handlebars JS), um Daten von einem Server zu lesen und die Seite darzustellen, aber der Browser zeigt den Benutzern immer die zuletzt dargestellte Seite an und Handlebars liest weder neue Daten vom Server noch aktualisiert es den Inhalt. Was könnte falsch sein??

Wenn ich die Umschalttaste zum Neuladen drücke, zeigt der Browser zwar neuen Inhalt an, aber ich kann meine Benutzer nicht bitten oder von ihnen erwarten, dies bei jedem Laden unserer Seite zu tun.

Kann jemand nützliche Hinweise geben?

200 OK

Antwortheader:

Accept-Ranges: bytes
Cache-Control: no-cache, no-store, must-revalidate
Connection: keep-alive
Content-Length: 12229
Content-Type: text/html
Date: Fri, 14 Aug 2020 09:08:10 GMT
ETag: "1e9602c3ddcf81c338fa4194c61ea035"
Last-Modified: Fri, 07 Aug 2020 12:38:22 GMT
Server: nginx/1.19.1
Strict-Transport-Security: max-age=0; includeSubDomains
Vary: Origin, Access-Control-Request-Headers, Access-Control-Request-Method
x-amz-request-id: tx00000000000004b9d2b06-005f36547a-ab8956-ams3b
x-rgw-object-type: Normal

Anforderungsheader:

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: en-GB,en-US;q=0.9,en;q=0.8
Cache-Control: max-age=0
Connection: keep-alive
Cookie: _ga=GA1.1.709310680.1596978913; _gid=GA1.1.2045080055.1596978913
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36
(index):48 [Violation] Avoid using document.write(). https://developers.google.com/web/updates/2016/08/removing-document-write

​ Wir führen ein HTTP-GET durch, da Cloudflare vor Nginx läuft, das die TLS-Terminierung durchführt und ein normales HTTP-GET an unser Nginx ausführt. Ich habe Angst davor, mir vorzustellen, welche weiteren Caching-Probleme das Cloudflare-Caching mit sich bringen wird, wenn wir erst einmal mit Cloudflare live gehen. Wir müssen in ein paar Tagen live gehen und müssen das lösen, bevor wir mit dieser Version in Produktion gehen. Wir wären für schnelle Hilfe in dieser Hinsicht dankbar, um das obige Problem zu lösen. Vielen Dank im Voraus.

Antwort1

Sie haben verwendetCache-Control-Anweisungendie miteinander in Konflikt stehen, daher muss der Browser entscheiden, welche Anweisungen er befolgt und welche er ignoriert.

Konkret haben Sie Folgendes verwendet:

  • no-cache. Dadurch kann die Antwort tatsächlich zwischengespeichert werden, obwohl sie sofort als veraltet markiert und immer wieder beim Ursprungsserver erneut validiert wird.
  • must-revalidate: Bedeutet nur, dass ein veraltetes zwischengespeichertes Dokument erneut mit dem Ursprungsserver validiert werden muss. Die damit implizierte Angabe no-cachehat hier keine weiteren Auswirkungen.
  • no-store: Die Antwort nicht zwischenspeichern.

Was macht ein Browser, wenn Sie angegeben haben, dass er es nicht zwischenspeichern soll, es aber trotzdem in Ordnung ist, es zwischenzuspeichern?

Wenn Sie nicht möchten, dass die Antwort zwischengespeichert wird, verwenden Sienur no-store. Verwenden Sie nicht die anderen beiden Cache-Control-Direktiven.

verwandte Informationen