Sie bitten Chrome, den lokalen Cache für XmlHttpRequest zu umgehen, so wie es in Firefox möglich ist?

9

Wie einige von Ihnen vielleicht schon wissen, gibt es in Firefox / Chrome einige Caching-Probleme für Anfragen, die vom XmlHttpRequest-Objekt ausgelöst werden. Diese Probleme bedeuten, dass der Browser die Regeln nicht streng befolgt und nicht zum Server für die neue XSLT-Datei (zum Beispiel) geht. Antwort hat keine Expires-Kopfzeile (aus Leistungsgründen können wir sie nicht verwenden).

Firefox hat zusätzliche Parameter im XHR-Objekt "channel", auf die Sie den Wert Components.interfaces.nsIRequest.LOAD_BYPASS_CACHE setzen, um explizit zum Server zu gehen.

Gibt es so etwas für Chrome?

Lassen Sie mich sofort alle Benutzer anhalten , die empfehlen würden, den Zeitstempel als Wert von GET-Parameter oder zufälliger Ganzzahl hinzuzufügen - Ich möchte nicht, dass der Server unterschiedliche URL-Anforderungen erhält. Ich möchte, dass es die ursprüngliche URL erhält. Der Grund ist, dass ich Server davor schützen möchte, zu viele verschiedene Anfragen für einfache statische Dateien zu erhalten und zu viele Daten an Clients zu senden, wenn sie nicht benötigt werden.

Wenn Sie eine statische Datei mit einem generierten GET-Parameter (wie '? forcenew = 12314') drücken, werden 200 Antworten jedes Mal und 304 für jede folgende Anfrage für diesen Wert der zufälligen Ganzzahl dargestellt. Ich möchte Anfragen stellen, die immer 304 zurückgeben, wenn die statische Zieldatei mit der Clientversion identisch ist. Dies ist BTW, wie Web-Browser out-of-the-Box funktionieren sollte, aber XHR-Objekte neigen dazu, nicht zu Server überhaupt zu fragen, ist Datei geändert oder nicht.

    
Milan Aleksić 14.07.2011, 14:42
quelle

3 Antworten

2

In meinem Hauptprojekt bei der Arbeit hatte ich genau das gleiche Problem. Meine Lösung bestand nicht darin, zufällige Zeichenfolgen oder Zeitstempel an GET-Anforderungen anzuhängen, sondern eine spezifische -Zeichenfolge an GET-Anforderungen anzufügen.

Wenn Sie eine Revisionsnummer haben, z. Subversion Revision oder ebenfalls von git / mer oder was auch immer Sie verwenden, hängen Sie das an. Statische Dateien erhalten bis zum Erscheinen einer neuen Revision 304 Antworten. Wenn die neue Version passiert, wird eine einzige 200 Antwort gewährt und es ist wieder glücklich, 304 Antworten zu generieren. : -)

Dies hat den zusätzlichen Vorteil, browserunabhängig zu sein.

Wenn Sie Pech haben und keine Revisionsnummer haben, dann machen Sie eine und erhöhen Sie sie jedes Mal, wenn Sie eine Veröffentlichung machen.

    
CodeReaper 10.08.2011, 16:44
quelle
1

Sie sollten sich Etags anschauen, Etags sind Schlüssel, die aus dem Inhalt der Datei also einmal die Datei generieren können Auf dem Server ändert sich das System in ein neues Etag. Offensichtlich wird dies eine Änderung auf der Serviceseite sein, was Sie tun müssen, wenn Sie 200 und dann nachfolgende 304's wollen. Chrome und FF sollten diese Etags respektieren, sodass Sie keine verrückten clientseitigen Hacks ausführen sollten.

    
Kinlan 14.07.2011 17:17
quelle
0

Chrome unterstützt jetzt den HTTP-Header Cache-Control: max-age=0 request. Sie können es einstellen, nachdem Sie eine XMLHttpRequest -Instanz geöffnet haben:

%Vor%

Dadurch wird Chrome angewiesen, die zwischengespeicherte Antwort ohne erneute Validierung nicht zu verwenden.

Weitere Informationen finden Sie unter Der Stand der Browser-Caching, erneut besucht von Mark Nottingham und RFC 7234-Hypertext-Übertragungsprotokoll (HTTP / 1.1): Caching .

    
Leonid Vasilyev 19.04.2017 12:42
quelle