Für meine Site habe ich die folgenden Zugriffsregeln:
# BEGIN Gzip
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript
</IfModule>
# END Gzip
# BEGIN EXPIRES
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 10 days"
ExpiresByType text/css "access plus 1 month"
ExpiresByType text/plain "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType application/x-javascript "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
ExpiresByType application/x-icon "access plus 1 year"
</IfModule>
# END EXPIRES
Ich habe gerade meine Seite aktualisiert und es sah alles verrückt aus, bis ich meinen Cache geleert habe. Wie kann ich den Browser des Clients zwingen, den Cache nach einem Update zu leeren, damit der Benutzer die Änderungen sehen kann?
cache busting
für weitere Informationen.Antworten:
Sie können Browser zwingen, etwas zwischenzuspeichern, aber
Sie können Browser nicht zwingen, ihren Cache zu leeren.
Daher besteht die einzige Möglichkeit (AMAIK) darin, eine neue URL für Ihre Ressourcen zu verwenden. So etwas wie Versionierung.
quelle
Wie andere Antworten bereits sagten, ist das Ändern der URL eine gute Cache-Busting-Technik. Es ist jedoch eine Menge Arbeit, eine größere Site zu durchsuchen, alle URLs zu ändern und auch die Dateien zu verschieben.
Eine ähnliche Technik besteht darin, der URL-Zeichenfolge, die entweder eine zufällige Zeichenfolge / Nummer oder eine Versionsnummer ist, einfach einen Versionsparameter hinzuzufügen und nur auf die geänderten Dateien abzuzielen.
Wenn Sie beispielsweise das CSS Ihrer Site ändern und es bis zu einer erzwungenen Aktualisierung wackelig aussieht, fügen Sie es einfach
?ver=1.1
dem CSS-Import am Anfang der Datei hinzu. Dies ist für den Browser eine andere Datei, aber Sie müssen nur den Import ändern, nicht den tatsächlichen Speicherort oder Namen der Datei.z.B:
<link href="assets/css/style.css" rel="stylesheet" type="text/css" />
wird
<link href="assets/css/style.css?ver=1.1" rel="stylesheet" type="text/css" />
Funktioniert auch hervorragend für Javascript-Dateien.
quelle
Ich habe dein Problem ...
Wir können zwar den Client-Browser-Cache vollständig leeren, aber Sie können Ihrer Anwendung Code hinzufügen, damit Ihre letzten Änderungen den Client-Browser widerspiegeln.
In Ihrem
<head>
:Quelle: http://goo.gl/JojsO
quelle
Sie können die Browser nicht zwingen, den Cache zu leeren.
Ihre HTML-Datei scheint früher neu geladen zu werden, da sie nach 10 Tagen abläuft. Sie müssen lediglich Ihre HTML-Datei aktualisieren und alle Ihre Dateien in einen neuen Ordner verschieben, z. B.
version-2/
oder eine Versionskennung an jede Datei anhängen, zmypicture-2.jpg
. Anschließend verweisen Sie auf diese neuen Dateien in Ihrer HTML-Datei, und der Browser lädt sie erneut, da sich der Speicherort geändert hat.quelle
Sie können dem Browser mitteilen, dass Ihre Site niemals zwischengespeichert wird, indem Sie den folgenden Code in den Header einfügen
Und um js, css cache zu verhindern, können Sie das Tool verwenden, um die Skripte zu minimieren und zu verschleiern, die jedes Mal einen zufälligen Dateinamen generieren sollten. Das würde den Browser zwingen, sie auch vom Server neu zu laden.
Hoffentlich hilft das.
quelle
In meinem Fall ändere ich eine bestimmte JS-Datei häufig und muss in allen Browsern, in denen sie verwendet wird, in der letzten Version vorliegen.
Ich habe keine bestimmte Versionsnummer für diese Datei, daher habe ich einfach das aktuelle Datum und die aktuelle Uhrzeit (Stunde und Minute) gehasht und als Versionsnummer übergeben:
Ich muss es jede Minute laden, aber Sie können entscheiden, wann es neu geladen werden soll.
quelle
Sie können "Zugriff plus 1 Sekunde" festlegen und auf diese Weise wird es aktualisiert, wenn der Benutzer das nächste Mal die Site betritt. Behalten Sie die Einstellung für einen Monat bei.
quelle
Das Folgende hilft Ihnen jetzt nicht mehr bei Dateien, die bereits zwischengespeichert sind. In Zukunft können Sie jedoch Folgendes verwenden, um eine Anforderung auf einfache Weise zu erzwingen, etwas Neues zu erhalten, ohne den tatsächlichen Dateinamen zu ändern.
Je weiter oben in Ihrer Ordnerstruktur Sie diesen Ansatz wählen, desto mehr werden Sie mit einer einfachen Änderung aus dem Cache werfen.
Zum Beispiel, wenn Sie das gesamte CSS und Javascript Ihrer Site in einem Hauptordner speichern
Dann können Sie damit beginnen, es in Ihrem HTML als "Assets-XXX" zu bezeichnen, und eine Regel wie diese verwenden, um den gesamten Inhalt der Assets aus dem Cache zu entfernen.
Beachten Sie, dass Sie in diesem Fall den 302 in einen 301 ändern, nachdem Sie ihn zum Laufen gebracht haben. Dann wird das Caching aktiviert. Wenn es sich um einen 302 handelt, wird er auf Browserebene nicht zwischengespeichert, da es sich um eine temporäre Umleitung handelt. Wenn Sie dies auf diese Weise tun, können Sie die Ablaufzeit für alle Assets auf 30 Tage erhöhen, da Sie die Daten einfach aus dem Cache entfernen können, indem Sie einfach den Ordnernamen auf der Anmeldeseite ändern.
quelle
Am einfachsten ist es, der Anforderung eine Dateizeit hinzuzufügen. z.B
myfile.txt? 2014-10-30-13: 12: 33
Versionierung nach Datum.
quelle
Ändern Sie den Namen der CSS-Datei. Laden Sie die Seite und ändern Sie die Datei erneut in dem ursprünglichen Namen, der für mich funktioniert.
quelle
Verwenden Sie das Mod-Rewrite mit R = 301 - wobei Sie eine inkrementelle Versionsnummer verwenden:
Um> css / ver / file.css => css / file.css zu erreichen? V = ver
Beispiel: css / 10 / file.css => css / file.css? v = 10
Gleiches kann auf js / files angewendet werden. Inkrementieren, um die Aktualisierung zu erzwingen, 301 erzwingt einen erneuten Cache
Ich habe dies in Chrome, Firefox, Opera usw. Getestet
PS: Das? V = ver dient nur der Lesbarkeit, dies führt nicht zu einer Aktualisierung
quelle
Das hat bei mir funktioniert.
suche danach:
durch Folgendes ersetzen:
Seite hochladen und aktualisieren. Sie erhalten einen Seitenfehler.
Ändern Sie es einfach wieder in:
Seite erneut hochladen und aktualisieren.
Ich habe dies auf allen meinen Geräten überprüft und es hat funktioniert.
quelle