Ich habe eine Webseite mit einer Ressource an einer sich ständig ändernden Adresse. Beispiel: Die Webseite befindet sich möglicherweise unter http://www.mysite.com/?page=page1 und enthält möglicherweise ein Bild http_: //www.mysite.com/?img= image999. Obwohl sich beide Ressourcen auf meiner Website befinden, kontrolliere ich nicht die Platzierung bestimmter Bilder auf bestimmten Seiten.Partielle Zwischenspeicherung von Webressourcen verhindern
Ich setze Header für langes Caching auf Seiten sowie Bilder. Wenn der Benutzeragent jedoch nur Webseiten und keine Bilder zwischenspeichert (oder der Benutzer beispielsweise den Cache löscht und das Bild aus dem Cache gelöscht wird), ruft der Benutzeragent die Seite aus dem Cache ab und fordert /? Img = image999 an. An dieser Stelle befindet sich das Bild jedoch nicht mehr bei /? Image = image999, sondern stattdessen bei /? Image = image998. Somit wird das Bild dem Benutzer nicht angezeigt.
Was ist die Lösung für dieses Problem? Hier sind die, die ich mir vorstellen konnte: -
- Deaktivieren Sie das Zwischenspeichern von Webseiten und Bildern. Schlechteste Lösung.
- Deaktivieren Sie nur das Zwischenspeichern von Webseiten. Bessere Lösung.
- Erinnern Sie sich auf der Serverseite, dass image998 einmal bei image999 war und wenn eine Anfrage für /? Image = image999 eingeht, leiten Sie sie um /? Image = image998. Beste Lösung, aber ein Schmerz zu implementieren. EDIT: In der Tat, ich weiß jetzt, das ist unmöglich in meiner Situation sadface
Mein genaues Problem befaßt sich nicht mit Bildern, sondern mit HTML5-Videos. Insbesondere bei Google Chrome habe ich festgestellt, dass Videos ziemlich häufig aus dem Cache entfernt werden, obwohl ich ein Jahr Verfallsdatum im Cache festlege. Aber ich bin immer noch an der Lösung für allgemeine Ressourcen interessiert, unabhängig von den Caching-Richtlinien von Chrome.
EDIT: Um zu bestätigen, verwende ich "nicht revalidate" + "läuft in 1 Jahr ab" Caching auf der Webseite und das Bild. Wenn also ein UA die Webseite (Seite 1) + Bild (Bild999) einmal anfordert, trifft es den Server für nachfolgende Anfragen nicht und alles ist gut. Das Problem tritt auf, wenn das Bild aus dem UA-Cache herausfällt, die Webseite aber bleibt. In dieser Situation wird der UA nicht den Server für die Webseite anfordern, aber wird anfordern den Server für das Bild (image999). In der Zwischenzeit hat das Bild jedoch URLs geändert (image999 -> image998) und der Server gibt ein 404 zurück. Das Ergebnis ist, dass das UA das Bild nicht anzeigen wird. Wie verhindere ich das?
Die HTML-Seite, die den Link zu img999 enthält, sollte sich ändern, und der Browser sollte eine neue Seite anfordern, anstatt die zwischengespeicherte Version zu verwenden, da kein HTTP-Header mit NOT-MODIFIED erhalten wird. Ich verstehe das Problem nicht. Am Ende der Frage sagen Sie, dass das Problem ist, dass es nicht zwischengespeichert wird, was nicht das ist, was Sie am Anfang der Frage (mit einem Link zu einer veralteten Ressource) gesagt haben –
Sorry für die Verwirrung. Es ist die Webseite, die zwischengespeichert wird, aber nicht das Bild. Ich muss beide im Cache sein. – Arnavion
Der Grund, warum ich nicht möchte, dass die Webseite erneut heruntergeladen wird, wenn sich die Bild-URL ändert, ist, dass das Bild immer noch dasselbe ist, nur unter einer anderen URL. Wie gesagt, das eigentliche Problem ist nicht mit Bildern, sondern mit HTML5-Videos, und die URL, die sich ständig ändert, ist eine Verhinderungsmassnahme für die Hot-Linking-Funktion. Aber wenn ein Kunde die Webseite + Video bereits angefordert hat, ist es mir egal, ob sie ihn für alle Ewigkeit zwischenspeichern. – Arnavion