Ist es der Dateiname oder die ganze URL als Schlüssel verwendet, die in browser-caches?
Ist es üblich, wollen Browser-cache-Ressourcen - JavaScript, CSS, Bilder, usw. bis es eine neue version verfügbar ist, und dann sicherzustellen, dass der browser holt und speichert die neue version statt.
One-Lösung ist zum einbetten einer Versionsnummer in die Ressource mit dem Namen, aber die Platzierung der Ressourcen verwaltet werden auf diese Weise in einem Verzeichnis mit einer Revisionsnummer in der er das gleiche tun? Ist der ganze URL zu der Datei, die als Schlüssel in den cache des Browsers, oder ist es nur der Dateiname selbst und einige meta-Daten?
Wenn meine änderungen am code Holen /r20/example.js
zu /r21/example.js
, kann ich sicher sein, dass revision 20 von example.js
zwischengespeichert wurde, aber jetzt revision 21 wurde geholt statt und es ist nun zwischengespeichert?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, jede Veränderung in jedem Teil der URL (ohne HTTP-und HTTPS-Protokolle änderungen) wird interpretiert als eine andere Ressource, die durch den browser (und alle zwischengeschalteten Proxys), und wird deshalb in eine separate Einheit, die im browser-cache.
Update:
Den Anspruch in diese ThinkVitamin Artikel, dass Opera und Safari/Webkit-Browser keinen cache-URLs mit ?Abfrage=Streicher ist false.
Hinzufügen einer Versionsnummer parameter an eine URL ist eine vollkommen akzeptable Art und Weise zu tun, cache-busting.
Was vielleicht verwechselt der Autor des ThinkVitamin Artikel ist die Tatsache, dass schlagen, Geben Sie in die Adress - /Suchleiste in Safari und Opera Ergebnisse in verschiedenen Verhalten für URLs mit query-string in Ihnen.
Jedoch (und das ist der wichtige Teil!!!!) Opera und Safari sich Verhalten wie IE und Firefox, wenn es um caching eingebettete/verknüpfte Bilder und stylesheets und Skripts, die in Webseiten - unabhängig davon, ob Sie über das "? " - Zeichen in URLs. (Dies kann überprüft werden mit einem einfachen test auf einem normalen Apache-server.)
(Ich würde kommentiert haben die momentan akzeptierte Antwort, wenn ich hatte den Ruf, es zu tun. 🙂
Browser-cache-key ist eine Kombination aus der Anfrage-Methode und der Ressourcen-URI. URI besteht aus Schema, authority, path, query und fragment.
Relevanten Auszug aus Die HTTP 1.1 Spezifikation:
Relevanten Auszug aus URI-Spezifikation:
#fragment
Teil wird nicht verwendet, da der cache-key. Es ist nicht in der HTTP-Anfragen sowieso. Das ist ein Teil der browser-Funktionalität nutzen, nicht HTTP.Ich bin 99.99999% sicher, dass es die gesamte url, die verwendet wird, um cache-Ressourcen in einem browser, so dass Ihre url-Schema, sollte funktionieren gut.
#fragment
Teil.Das MINIMUM, die Sie benötigen zu identifizieren, die für ein HTTP-Objekt ist durch den vollständigen Pfad, einschließlich aller query-string-Parameter. Einige Browser können keine Objekte Zwischenspeichern, mit einem query-string aber das hat nichts zu tun mit der-Taste, um den cache.
Es ist auch wichtig, daran zu erinnern, dass das der Pfad ist nicht mehr ausreichend. Der Vary: - header in der HTTP-Antwort-Warnungen des browser (oder proxy-server, etc.) etwas ANDERES als die URL, die genutzt werden sollte, um zu bestimmen, der cache-key, wie cookies, encoding-Werte, etc.
Zu deiner Frage, ja, ändern Sie die URL der .js-Datei ist ausreichend. ZU der größeren Frage, was bestimmt der cache-key, es ist die URL plus der Vary: - header Einschränkungen.
Ja. Einen anderen Weg ist der gleiche von den caches Perspektive.
Es hat natürlich auch den kompletten Pfad '/r20/example.js' vs '/r21/example.js " könnte sein, völlig verschiedene Bilder, um mit zu beginnen. Was Sie vorschlagen, ist ein gangbarer Weg, um Griff version control.
In den meisten Browsern die volle url verwendet wird.
In einigen Browsern, wenn Sie eine Abfrage in der url, das Dokument wird nie zwischengespeichert werden.
Gesamte url. Ich habe gesehen, ein seltsames Verhalten in einigen älteren Browsern, wo die groß-und Kleinschreibung ins Spiel kam.
Zusätzlich zu den vorhandenen Antworten ich möchte nur hinzufügen, dass es vielleicht nicht anwenden, wenn Sie ServiceWorkers oder e.g offline-plugin. Dann könnte man verschiedene cache-Regeln-je nachdem, wie die ServiceWorkers eingerichtet sind.
hängt. es soll die vollständige URL, aber einige Browser (Opera, SafariZwei) anwenden eine andere cache-Strategie für urls mit unterschiedlichen params.
beste Wette ist, ändern Sie den Namen der Datei.
Es ist eine sehr clevere Lösung, die hier (nutzt PHP, Apache)
http://verens.com/archives/2008/04/09/javascript-cache-problem-solved/
Strategie:
“Nach den Buchstaben des HTTP-caching-Spezifikation, user-agents sollten nie cache-URLs mit query strings. Während Internet Explorer und Firefox ignorieren diese, Opera und Safari nicht, um sicherzustellen, dass alle user-agents können die cache-Ressourcen, die wir brauchen, zu halten-query-strings aus Ihren URLs."
http://www.thinkvitamin.com/features/webapps/serving-javascript-fast