![]() |
|
|
Themen-Optionen |
|
|
Nach oben #1 | ||
|
Erfahrener Benutzer
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
|
Und nochmals, (ich lebe wieder
ich habe in einer Datei folgenden Code gefunden: PHP-Code:
Hier steht: http://www.faqs.org/rfcs/rfc2616 Zitat:
Zitat:
Warum genau soll dieser header gesendet werden? Danke für die Erklärung. Grüße, Ben. |
||
|
|
|
|
|
Nach oben #2 |
|
Erfahrener Benutzer
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 662
|
Die Verwendung ist sehr sinnvoll und auch einigermaßen einfach: Man nehme an, du hast ein Script, das Bilder generiert für eine Gallery oder sonstiges (Wasserzeichen, was auch immer). Dann hast du z.B. das Datum der letzten Änderung der Datei, die aus der Datei selber ersichtlich ist. Wenn du diese als LAST-MODIFIED mitschickst, bekommst du bei der nächsten Anfrage dieses Datum mit dem Request an den Server geschickt, kannst es auslesen und mit dem Datum der ursprünglichen Datei vergleichen. Stimmt es überein, reicht es in dem Falle einen HTTP-Status-Code 304 Not Modified zu schicken und danch die Berechnung der Seite abzubrechen. Es wird dann die Grafik aus dem Cache des Browsers genommen. Diese Art des Cachings kann man auch auf andere Bereiche übertragen (Letzte Änderung im Forum, Gästebuch, etc.). Es spart eine Menge Traffic, wenn sich der Inhalt einer Seite seltener ändern sollte.
Ob es immer in der Praxis so gut funktioniert, wie es die Theorie vorgibt, kann ich nicht sagen, ich weiß nur, dass es bei mir bisher immer sehr gut funktioniert hat.
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll |
|
|
|
|
|
Nach oben #3 |
|
Erfahrener Benutzer
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
|
Ah, gute Erklärung. Danke.
Habe diese Codezeile tatsächlich in einer sehr, sehr, sehr, sehr häufig aufgerufenen Datei gefunden. Das erklärt dann Vieles. Hat jemand eventuell eine Art "Tutorial" oder so zur effektiven und optimierten Verwendung solcher Header? Interessantes Thema. Danke im Voraus. Grüße, Ben. |
|
|
|
|
|
Nach oben #4 |
|
Benutzer
Registriert seit: 24.10.2006
Beiträge: 90
|
Ich verwende es in einigen PHP Websites damit eben nicht immer alles neu gesendet werden muss.
Du findest das Last-Modified Datum im IF-MODIFIED-SINCE Header, weshalb du das einfach überprüfen kannst Nützlich sind auch noch ETag, Expires, Content-Encoding etc. Btw: Es reicht auch PHP-Code:
Geändert von Byrel (15.12.2006 um 16:26 Uhr). |
|
|
|
|
|
Nach oben #5 |
|
Erfahrener Benutzer
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 662
|
Ganz grob sollte vielleicht folgender Beispielcode helfen!?
PHP-Code:
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll |
|
|
|
|
|
Nach oben #6 |
|
Erfahrener Benutzer
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
|
|
|
|
|
|
|
Nach oben #8 |
|
Erfahrener Benutzer
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
|
Nun, es ist ja so. Direkt wird man das kaum anwenden können, denke ich mal, weil der Inhalt ja nicht fix auf einer .html-Seite oder so steht, sondern aus einer Datenbank und via Templateengine ausgegeben wird.
Das heißt, dass ich ja nicht wirklich eine Datei habe, deren letzte Aktualisierung ich testen kann. Ich wollte eher erfragen, ob es so etwas "in der Art" auch für normalen Content gibt. Klar, was ich meine? |
|
|
|
|
|
Nach oben #9 | |
|
BIN EIN KRASSA HELD!!!111
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.184
|
du musst nur in der Datenbank speichern wann die jeweilige Seite das letzte mal geändert wurde und den wert nutzen anstatt der abfrage wann die datei das lette mal verändert wurde.
Zitat:
|
|
|
|
|
|
|
Nach oben #10 | |
|
Erfahrener Benutzer
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
|
Zitat:
Frage ist nur, wo jetzt der Unterschied zu einem "normalen" Cache, sei es selbst implementiert, aus einem Framework oder oder oder .. ist. Grüße, Ben. |
|
|
|
|
|
|
Nach oben #11 | ||
|
BIN EIN KRASSA HELD!!!111
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.184
|
Zitat:
Zitat:
mfg robo47 |
||
|
|
|
|
|
Nach oben #12 | ||
|
Erfahrener Benutzer
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
|
Zitat:
Zitat:
Ganz abgesehen davon, dass ich die Daten eh irgendwo herbekommen muss .. warum sollte ich abfragen, ob die Daten aktualisiert wurden, wenn ich eh die Daten so auslese, als ob sie aktualsiert worden wären? Bin verwirrt. |
||
|
|
|
|
|
Nach oben #13 | ||
|
BIN EIN KRASSA HELD!!!111
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.184
|
Zitat:
Angenommen es kommt eine Anfrage mit dem passenden Header (modified since 1.1.2005) dann machst du ein Query in der form (ist jetzt leider zum Teil Pseudocode, weil ich nicht genau auf Anhieb weis wie man das mit dem IF in SQL umsetzt) Code:
IF feld_last_modified "älter" als 1.1.2005 SELECT *,'TRUE' AS MODIFIED FROM daten ELSE SELECT 'FALSE' AS MODIFIED mfg robo47 |
||
|
|
|
|
|
Nach oben #14 | |
|
Erfahrener Benutzer
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 662
|
Zitat:
Du kannst es auch auf andere Dinge anwenden, du musst das "Problem" nur portieren. Anstatt filectime zur Ausfindigmachung der letzten Änderung nimmst du in einem Gästebuch zum Beispiel den aktuellsten Timestamp aus der Datenbank. Funktioniert genauso. Man kann damit Foren, Threads, Postfächer, einfach alles so programmieren, dass man nurnoch ein Minimum an Berechnung braucht. Allerdings nur, wenn sich nicht jede Sekunde in den entsprechenden Bereichen eh etwas ändert, ist ja klar, oder? Auch im Bezug auf AJAX ist es sehr interessant, dass man die Inhalte einzelner Abfragen im JavaScript zwischenspeichern kann und bei einer Rückantwort von 304 eben diese nutzt und anderenfalls bei 200 diese überschreibt. Es ist also multifunktional @robo: Ansich funktioniert es genau so. Da man aber unterscheiden kann, ob ein Modified-Header geschickt wurde oder nicht, macht es weniger Sinn in meinen Augen. Ich würde einfach für den Fall, dass der Client einen If-Modified-Since-Header schickt iene zusätzliche Abfrage machen, die nur das aktuellste Datum aus der DB zieht und dieses dann vergleichen. Dank der Datum-/Zeitfunktionen in MySQL kann ich ja bekanntlich aus einem DATETIME-Feld auch gleich den Timestamp zurückgeben lassen. Sollte sich etwas geändert haben, wird dann zwar eine DB-Abfrage mehr gemacht, als sonst, aber im Umkehrschluss erspare ich mir vielleicht 2, 3 oder noch mehr Abfragen, wenn sich eben NICHTS geändert hat.
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll Geändert von MrNiceGuy (16.12.2006 um 09:03 Uhr). |
|
|
|
|