Kraft-browser neu zu laden, alle Caches nach dem update
Gibt es eine Möglichkeit zu erzwingen, dass die clients von einer Webseite neu zu laden, den cache (also Bilder, javascript, etc.) nach einem server geschoben wurde, ein update der Codebasis? Wir bekommen eine Menge Anrufe beim Helpdesk zu Fragen, warum bestimmte Funktionen nicht mehr funktioniert. Eine einfache hard-refresh behebt die Probleme, wie es downloads die aktualisierten javascript-Datei.
Einzelheiten, die wir verwenden Glassfish 3.x. und JSF 2.1.x. Dies würde für mehr als nur JSF natürlich.
Beschreiben, welches Verhalten ich hoffe, dass ist möglich:
Website A hat zwei Bilder und zwei javascript-Dateien. Ein Benutzer besucht die Website und die 4 Dateien zwischengespeichert werden. Soweit ich bin besorgt, keine Notwendigkeit zu "re-downloaden", sagte der Dateien, es sei denn, der Benutzer explizit erzwingt eine "harte" refresh oder löscht Ihren cache. Sobald eine Seite geschoben wird, ist ein update auf eine der Dateien, die server haben könnte irgendeine Art von Metadaten in den header-Information der Kunden der Sprach-update. Wenn der Kunde es wünscht, werden die neuen Dateien heruntergeladen werden.
Was ich nicht tun möchten, ist setzen Sie meta-tag im header einer Seite zu erzwingen, nichts jemals zwischengespeichert werden...ich möchte nur etwas, das sagt dem client eine Aktualisierung stattgefunden hat und es sollte das Letzte mal was aktualisiert wurde. Ich nehme an, dies wäre eine Art der Versionierung auf der client-Seite.
Vielen Dank für Ihre Zeit!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der richtige Umgang mit diesen ist mit änderung der URL-Konvention für Ihre Ressourcen. Zum Beispiel, haben wir Sie als:
Den browser noch den cache der Datei, aber tun Sie es der richtige Weg mit der Versionsverwaltung ist das hinzufügen von etwas an die URL an. Hinzufügen eines Werts zu den querystring nicht erlauben, caching, also der Ort, um es nach
/resources/
.Referenz für die querystring-caching: http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.9
So zum Beispiel, deine URLs Aussehen würde:
Also, was Sie tun können, verwenden Sie den Projekt-Versionsnummer (oder ein Wert in einer der Eigenschaften/config-Datei, die Sie manuell ändern, wenn Sie wollen, Cache-Dateien neu geladen werden), da diese Zahl sollte ändern sich nur, wenn das Projekt geändert wird. Also, Ihre URL könnte folgendermaßen Aussehen:
Sollte leicht genug sein.
Jetzt ist das problem mit der Zuordnung der URL, da dieser Wert in der Mitte ist dynamisch. Der Weg, den wir überwanden, die mit einem URL-rewriting-Modul, das erlaubt uns, zum filtern von URLs, bevor Sie zu unserer Anwendung. Das umschreiben sah für URLs, die sah aus wie:
Entfernt und die
cacheholder_______/
Teil. Nach dem umschreiben, es sah aus wie eine normale Anfrage, und der server antwortet mit der richtigen Datei, ohne irgendwelche anderen spezifischen mapping/logic...der Punkt ist, dass der browser dachte, es war eine neue Datei (obwohl es wirklich nicht), so dass es ihn angefordert, und der server findet es heraus und serviert die richtige Datei ist (auch wenn es eine "komische" URL).Natürlich, eine weitere option ist das hinzufügen dieses dynamischen string an den Dateinamen selbst, und dann mit dem rewrite-tool, um es zu entfernen. So oder so, die gleiche Sache ist erledigt - für eine Zeichenfolge von text während umschreiben, und entfernen Sie es. Dies ermöglicht Ihnen, zu täuschen, den browser, aber nicht der server 🙂
UPDATE:
Eine alternative, die ich wirklich mag, ist der Dateiname, basierend auf dem Inhalt und cache. Zum Beispiel, dass könnte getan werden, mit einem hash. Natürlich, diese Art der Sache ist nicht etwas, würden Sie manuell tun, und speichern Sie das Projekt (hoffentlich); es ist etwas, das Ihre Anwendung/Rahmen behandeln soll. Zum Beispiel in Grails, gibt es ein plugin, dass "hashes und caches" Ressourcen, so dass für den folgenden Auftritt:
<script>
/<link>
- tags für Ihre Seite, die Hash-name verwendet wird,Was ist cool an diesem setup ist, dass Sie nicht haben, um sorgen über die caching-richtig - setzen Sie einfach die Dateien im cache für immer, und das hashing sollte aufpassen Dateien/mappings zur Verfügung stehen, wird basierend auf dem Inhalt. Es bietet auch die Möglichkeit für rollbacks/undo-Schritte bereits zwischengespeichert werden und schnell geladen.
"This specifically means that responses from HTTP/1.0 servers for such URIs SHOULD NOT be taken from a cache."
Vielleicht änderungen in HTTP/1.1 erklären könnte das unterschiedliche Verhalten?benutze ich einen no-cache-parameter-für diese Situationen...
eine string-Konstante mit dem Wert wie (config-Datei)
und in Seiten, die ich verwenden Vermögenswerte wie
und wenn ich update mein code, ändern Sie einfach die $no_cache Wert, und es funktioniert wie ein Charme.