contao / core

Contao 3 → see contao/contao for Contao 4
GNU Lesser General Public License v3.0
490 stars 213 forks source link

Browser laden die Website nicht neu #600

Closed ghost closed 13 years ago

ghost commented 13 years ago

Hallo,

ich hab auf meiner Seite das Problem, dass bei aktiviertem Cache die Browser immer noch die alte Seite anzeigen, obwohl der Cache schon längst zerfallen sein müsste.

Reproduzieren lässt sich das ganze in der 2.6er und auch in der 2.7 RC1-Online Demo. Und zwar folgendermaßen:

  1. In der Demo den Seitencache auf 1 Minute stellen (habs bei dem Startpunkt gemacht)
  2. In einem zweiten Tab die Home-Seite der Demo aufrufen
  3. Im Seitenlayout die Position des Loginformular verändern
  4. Ein paar Minuten warten
  5. In dem zweiten Tab irgendeine andere Unterseite aufrufen und anschließend wieder auf Home klicken ->Es wird noch das alte Seitenlayout angezeigt. Erst nach einem F5 verändert sich die Position, so wie sie sollte.

Das ganze lässt sich sowohl mit FireFox, als auch mit dem Internet Explorer reproduzieren.

Die Ursache für das Verhalten liegt in der fehlerhaften Anweisung von TypoLight an dem Browser, denn das sendet folgenden Header:

       header('Cache-Control: public, max-age=' . $expire);
       header('Expires: '.gmdate('D, d M Y H:i:s', $expire).' GMT');

Sprich er sendet den Expires-Header korrekt, dass er in 1 Minute den Cache verwerfen soll. Jedoch liefert der Max-Age-Header einen widerspüchlichen Wert. Max-Age ist definiert, als die Zeit, wie Lange der Cache bestehen soll. Sprich die Differenz seit dessen Auslieferung und nicht seit dem Start der Unix-Epoche. Dadurch weiß der Browser nicht, ob er nun die 1 Minute von dem Expire-Header verwenden soll, oder die (momentan) 39 Jahre des max-age-Headers.

Korrekt müsste der max-age-Wert eigentlich 60 sein, wenn er eine Minute cachen soll.

Der korrekte Source müsste somit so aussehen:

       header('Cache-Control: public, max-age=' . ($expire-time()));
       header('Expires: '.gmdate('D, d M Y H:i:s', $expire).' GMT');

Eine kurze Erklärung zu dem max-age-Header findet man hier also max-age nicht die Differenz seit 1970 erwartet, sondern seit dessen Auslieferung.

MfG Elite

--- Originally created by anonymous on March 18th, 2009, at 05:15pm (ID 600)

leofeyer commented 13 years ago

--- Originally completed on March 18th, 2009, at 06:27pm