Browser zwingen, Bild jedesmal neu zu laden
Mario
- browser
Hallo,
ich habe eine triviale Frage, auf die ich aber bis jetzt keine Antwort weiß. Ist es möglich, den Browser zu zwingen, ein Bild jedesmal neu zu laden, anstatt es aus dem Cache zu holen? Ich bin echt verzweifelt, hat jemand von Euch vielleicht nen Tip?
Danke im voraus,
Gruß, Mario.
Hello,
ich habe eine triviale Frage, auf die ich aber bis jetzt keine Antwort weiß. Ist es möglich, den Browser zu zwingen, ein Bild jedesmal neu zu laden, anstatt es aus dem Cache zu holen? Ich bin echt verzweifelt, hat jemand von Euch vielleicht nen Tip?
Da gibt es hier im Forum bestimmt eine Menge Threads zum Thema "Bilder Datenbank", denn da hat man das Problem ja auch. Man muss das Bild per diskreter Response mit einem Script ausgeben.
Ich habe einen Header davorgeschaltetr, der das eigentlich leisten sollte:
if
header("HTTP/1.0 304 Not Modified");
header("Cache-Control: max-age=86400, must-revalidate");
else
header (make_content_type($bildtyp));
header ("Last-Modified: $last_modified");
Wesentlich ist, das der Client einmal ein max-age bekommt, das lange genug ist. Er schickt $_SERVER['HTTP_IF_MODIFIED_SINCE'] nur mit, wenn er einmal eine Haltbarkeitsangabe für das Bild erhalten hat. Der Server entscheidet dann, ob er das ganze Bild (else) oder nur die Statusinformation (if) an den Client schickt.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hello,
Nachtrag...
damit kann man i.d.R nur das Gegenteil erzwingen, und dem Browser einfach keine neue Information zur Verfügung stellen.
Wenn der user die Browserstrategie auf "Nie neuere Versionen der gespeicherten Seiten abfragen" gestellt hat, dann bekommt der Server gar nichts davon mit, dass der Browser überhaupt da ist.
Man kann den User also nur in einem der so beliebteb Newsletter oder mit einem tollen[tm] Popup darauf aufmerksam machen, dass er doch bitte gefälligst seinen Browser auf die einzig wahre Einstellung bringen soll ... *gg*
Liebe Grüße aus http://www.braunschweig.de
Tom
Hallo Tom,
vielen Dank auch stellvertretend an alle anderen für die Antworten. Wie ich den Postings entnehmen kann, ist nur Deine Lösung zufriedenstellend. Leider bin ich auf dem Gebiet nicht so bewandert, obwohl ich mich nicht als Laie bezeichnen würde.
Deswegen würde mich interessieren, ob Du den Code vielleicht kurz erläutern könntest oder mir einen Hinweis eines guten Tutorials hast. Ich vermute, Du verwendest PHP, aber die header Funktionen sind mir komplett neu. Kann ich die einfach so in meinen Quelltext reinschreiben? Und falls ja, wo? Mir scheinen da einige Variablen undeklariert zu sein. Und mich würde interessieren, warum Du "max-age" 24 Stunden Zeit gibst und ob ich da nicht auch einfach nur 60 Sekunden schreiben kann, da es sein kann, daß mein Bild öfter aktualisiert wird.
Hoffentlich hören sich meine Fragen jetzt nicht zu trivial an! Danke im voraus,
Gruß, Mario.
Ich habe einen Header davorgeschaltetr, der das eigentlich leisten sollte:
if
header("HTTP/1.0 304 Not Modified");
header("Cache-Control: max-age=86400, must-revalidate");
else
header (make_content_type($bildtyp));
header ("Last-Modified: $last_modified");Wesentlich ist, das der Client einmal ein max-age bekommt, das lange genug ist. Er schickt $_SERVER['HTTP_IF_MODIFIED_SINCE'] nur mit, wenn er einmal eine Haltbarkeitsangabe für das Bild erhalten hat. Der Server entscheidet dann, ob er das ganze Bild (else) oder nur die Statusinformation (if) an den Client schickt.
Hello,
[...] einen Hinweis eines guten Tutorials hast.
Da kann ich im Moment http://tut.php-q.net empfehlen. Das wächst täglich. Im Moment hat es wohl im A4-Ausdruck 500 Seiten gut aufbereiteten Wissens über PHP und MySQL.
Ich vermute, Du verwendest PHP, aber die header Funktionen sind mir komplett neu. Kann ich die einfach so in meinen Quelltext reinschreiben?
Die Header müssen VOR jeglicher Ausgabe an den Browser erstellt sein. Mit (vor) dem ersten Byte (das im Quelltext-Fenster des Browsedrs erscheint) werden auch die Header abgesandt. Dann ist es zu spät, daran noch etwas zu ändern.
Und falls ja, wo? Mir scheinen da einige Variablen undeklariert zu sein. Und mich würde interessieren, warum Du "max-age" 24 Stunden Zeit gibst und ob ich da nicht auch einfach nur 60 Sekunden schreiben kann, da es sein kann, daß mein Bild öfter aktualisiert wird.
Klar, da kannst Du im Prinzip alles reinschreiben, was sinnvoll ist.
Du kannst auch Header senden, die das Speichern der Seite unterbinden.
Ich glaube, in Self steht was darüber drin. Ich finds im Moment nicht.
Das fand ich noch in meinem Sammelsurium:
PHP scripts often generate dynamic content that must not be cached by the client browser or any proxy caches between the server and the client browser. Many proxies and clients can be forced to disable caching with
<?php
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
// always modified
header("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache"); // HTTP/1.0
?>
Wenn der Browser das liest, hat er sowieso keine Lust mehr, im Cache nachzuaschauen *ggg*
Liebe Grüße aus http://www.braunschweig.de
Tom
Hallo!
Du kannst auch Header senden, die das Speichern der Seite unterbinden.
diesen quatsch lese ich immer wieder. nein, das kann man nicht. der browser schreibt die daten auf die platte und liest sie zur verarbeitung von dort.
header("Expires: [...]
Wenn der Browser das liest, hat er sowieso keine Lust mehr, im Cache nachzuaschauen *ggg*
auch wenn du ihn damit anweist, die datei bei erneuter anzeige erneut zu laden, speichert er sie dann wieder auf der platte und liest sie zur verarbeitung von da.
man _kann_nicht_ verhindern, das der browser die dateien speichert, man kann nur das verhalten bei einem refresh beeinflussen.
es wurde doch nun oft genug festgestellt, das es keinen wirksamen schutz für den quelltext oder bilder gibt, es sei denn, man verhindert die auslieferung.
freundl. Grüsse aus Berlin, Raik
Hello,
header("Expires: [...]
Wenn der Browser das liest, hat er sowieso keine Lust mehr, im Cache nachzuaschauen *ggg*auch wenn du ihn damit anweist, die datei bei erneuter anzeige erneut zu laden, speichert er sie dann wieder auf der platte und liest sie zur verarbeitung von da.
man _kann_nicht_ verhindern, das der browser die dateien speichert, man kann nur das verhalten bei einem refresh beeinflussen.
es wurde doch nun oft genug festgestellt, das es keinen wirksamen schutz für den quelltext oder bilder gibt, es sei denn, man verhindert die auslieferung.
Ist Dein Ironiedetektor kaputt? Wenn Du meine anderen Postings zum Thema gelesen hättest, dann hättest Du es bestimmt bemerkt. Ich hatte darauf hingewiesen, dass man dem Browser keine Vorschriften machen kann.
Nebenbei bemerkt: Der Browser kann die DAtei nicht von der Platte aus anzeigen. Der Browser ist nämlich eine Applikation und die hat gar keinen Zugriff auf die Platte. Die Applikation bittet das Betriebsystem, die Ditan in den Hauptspeicher zu laden und kann sie dann bestenfalls dort bearbeiten (lesen, weiterleiten zur Ausgabe...)
Liebe Grüße aus http://www.braunschweig.de
Tom
Hallo Tom!
Ist Dein Ironiedetektor kaputt?
anscheinend hat er da grad versagt.
Die Applikation bittet das Betriebsystem, ...
oops, peinliche panne. ich muss gestehen, meine ausführungen waren nicht korrekt. danke für den hinweis.
freundl. Grüsse aus Berlin, Raik
Hi,
es gibt folgende Meta-Angabe:
<meta http-equiv="expires" content="0">
Damit wird gesagt, dass die komplette Seite immer vom Server geladen wird. Das würde ja die Bilder mit einschließen. Content stellt hier die Zeit dar, wie lange eine Seite gültig sein soll, du könntest da also auch 1 Stunde einstellen.
Hier steht nochmal mehr dazu.
http://selfhtml.teamone.de/html/kopfdaten/meta.htm#weiterleitung
Das Problem ist halt nur, dass die ganze Seite immer neu geladen wird, was den Traffic natürlich erhöht.
mfg
ff
Hallo,
<meta http-equiv="expires" content="0">
Damit wird gesagt, dass die komplette Seite immer vom Server geladen wird. Das würde ja die Bilder mit einschließen.
Nein, es betrifft nur die HTML-Seite, in der dieser Tag eingebunden wurde. Eventuell eingebundene Bilder oder andere Ressourcen bekommen davon nichts mit. Die brauchen ihren eigenen HTTP-Header.
Viele Grüße
Carsten
hi,
Ist es möglich, den Browser zu zwingen, ein Bild jedesmal neu zu laden, anstatt es aus dem Cache zu holen?
es wird des öfteren empfohlen, einfach einen zufälligen parameter an den bildnamen anzuhängen, dann sollte der browser das bild neu laden.
wenn du also eine serverseitige technik zur verfügung hast, erzuge den img-tag dynmiasch, und hänge an den bildnamen einen zufälligen parameter an, src="bild.jpg?blah1546"
gruss,
wahsaga