75 Stimmen

Gibt es eine Möglichkeit, Browser zum Aktualisieren/Herunterladen von Bildern zu zwingen?

Ich habe ein Problem, bei dem Benutzer berichten, dass ihre Bilder nicht hochgeladen werden und die alten immer noch dort sind. Bei genauerer Betrachtung sind die neuen Bilder vorhanden, sie haben einfach denselben Namen wie die alten. Was ich beim Upload mache, ist, dass ich die Bilder aus SEO-Gründen umbenenne. Wenn sie ein Bild löschen, wird der alte Index verfügbar und wiederverwendet. Daher hat es denselben Bildnamen.

Gibt es einen Weg (ich dachte vielleicht, es könnte ein Meta-Tag dafür geben), um dem Browser zu sagen, dass er seinen Cache nicht verwenden soll?

Die bessere Antwort besteht darin, das Bild in etwas völlig Neues umzubenennen. Ich werde daran arbeiten, aber in der Zwischenzeit ist dies die schnelle Lösung, während ich am größeren Problem arbeite.

0 Stimmen

Falls Sie den Cache aktualisieren möchten, anstatt die URL zu ändern: stackoverflow.com/a/70954519/11216915

169voto

knittl Punkte 214432

Hängen Sie eine Abfragezeichenfolge mit einer beliebigen eindeutigen Nummer (oder Zeit, oder Versionsnummer usw.) an:

Dies führt zu einer neuen Anfrage aufgrund der unterschiedlichen URL.

3 Stimmen

+1, aber streng genommen handelt es sich nicht um einen anderen Dateinamen ;-) Der Dateiname ist derselbe, aber die URL ist definitiv anders.

17 Stimmen

Gubmo, einzigartig ist ein bisschen zu viel, das Beste in diesem Fall wäre, die Dateimodifikationszeit hinzuzufügen - auf diese Weise wird sie nur neu geladen, wenn nötig.

2 Stimmen

Die beste Möglichkeit besteht darin, eine Versionsnummer des Releases zu verwenden.

25voto

ndp Punkte 20756

Es ist schwierig. Du möchtest wirklich, dass Bilder zwischengespeichert werden, aber dann möchtest du sie nicht zwischenspeichern, sobald ein neues verfügbar ist:

  • Die Verwendung des Ablaufsdatums-Headers mit einem Datum in der Vergangenheit verhindert jegliches Zwischenspeichern. Schlecht
  • Das Hinzufügen eines "Cache-Busting"-Parameters ?342038402 kann das Problem beheben, kann aber auch verhindern, dass das Bild jemals zwischengespeichert wird, was nicht das ist, was du möchtest. Schlecht.
  • Die Verwendung des Ablaufsdatums-Headers mit einem kurzen (sagen wir 1 Stunde) Ablauf ist besser... nach einer Stunde wird der Benutzer das Bild sehen, aber dein Webserver muss es nicht jedes Mal bereitstellen. Ein Kompromiss, aber welche Zeit funktioniert? Nicht wirklich praktikabel.

Die Lösung? Ich kann an zwei gute Optionen denken:

  • Schaue dir eTags an und deine Möglichkeit, sie zu verwenden. Diese sind für diese Situation konzipiert. Der Browser wird explizit deinen Server fragen, ob die Datei aktuell ist oder nicht. Du kannst dies einfach in Apache aktivieren, wenn du es noch nicht hast.
  • Erstelle eine neue URL für jedes neue Bild (und verwende einen Ablaufdatum-Header in ferner Zukunft). Das ist woran du arbeitest.

1 Stimmen

"Das Hinzufügen einer "Cache Busting"... Schlecht." Das ist nicht wahr, es zwingt den Browser dazu, diese spezifische Version des Bildes im Cache zu speichern, sodass image.png?342038402 als diese Version im Cache gespeichert wird. Wenn Sie dasselbe Bild mit einer anderen Abfragezeichenfolge haben, ist das schlecht.

0 Stimmen

Michaelmol, aber dann müssten Sie jedes Mal manuell eine neue Zufallszahl erstellen, wenn das Bild geändert wird? Ich verstehe, dass Sie nicht möchten, dass es nie gecacht wird. Bei Verwendung dieser Technik sehe ich keinen Weg, das Bild einfach an seinen Speicherort mit dem gleichen Namen hochzuladen und dass etwas programmgesteuert den Pfad mit einer neuen Zufallszahl aktualisiert.

2 Stimmen

@ChadMizner Wenn Sie PHP verwenden, könnten Sie die Funktion filemtime(string $filename) von PHP in Kombination mit dem "Cache-Busting"-Parameter verwenden. Auf diese Weise ändert sich die URL für diese Datei jedes Mal, wenn die angeforderte Datei geändert wurde. (Mit freundlicher Genehmigung von Michael Krelin - Hacker).

13voto

Gianluca Demarinis Punkte 1806

Meine bevorzugte PHP-Lösung:

jede Änderung der Datei "erstellt" eine neue Version der Datei

0 Stimmen

Ich denke, deine Anführungszeichen sind unausgeglichen. Es scheint, als ob die gleiche/ähnliche Antwort von dir weiter unten mit korrekten Anführungszeichen gepostet wurde? Vielleicht sollte dies angepasst werden...

5voto

Rob Vanders Punkte 485

Fügen Sie das aktuelle Datum und die Uhrzeit zum Bildquellcode hinzu:

" />

2 Stimmen

Du könntest auch den Zwischenspeicher deaktivieren, weil dein Beispiel die Browser dazu zwingt, die Dateien jedes Mal herunterzuladen (weil sich der Zeitstempel jede Sekunde ändert). Ich würde vorschlagen, das i und s am Ende zu entfernen, sodass der Zeitstempel jede Stunde geändert wird. Auf diese Weise werden die Browser die Bilder nur einmal pro Stunde herunterladen. "Y.m.d.G"

4voto

samuil Punkte 4891

Sie können http-equiv im -Tag verwenden, um dem Browser mitzuteilen, den Cache nicht zu verwenden (oder noch besser - ihn auf eine definierte Weise zu verwenden), aber es ist besser, den Server zu konfigurieren, um ordnungsgemäße http-Cache-Header zu senden. Schauen Sie sich den Artikel über Caching an.

Dennoch unterstützen einige Browser möglicherweise nicht alle Teile des http-Standards, aber ich glaube, das ist der richtige Weg.

0 Stimmen

Im Gegenteil, die Verwendung von Workarounds unterstützt die schlechte Unterstützung der Browser für diese Ideen ;) Ich verstehe deinen Standpunkt und ich weiß, dass weitere Diskussionen normalerweise nirgendwohin führen - etwas ist "besser", aber funktioniert nicht wie beabsichtigt, etwas ist "schlechter", aber funktioniert. Es liegt alles am Webentwickler, was er oder sie wählen wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X