Cache-Control vs. Expires

Gesperrt
JWester1
Beiträge: 2
Registriert: Do 15. Sep 2011, 14:47
Kontaktdaten:

Cache-Control vs. Expires

Beitrag von JWester1 »

Hallo,

bei der Evaluierung einer Web-Application-Firewall (WAF) mit Caching-Funktionalität bin ich darauf gestoßen, dass Contenido sich widersprechende Header setzt:

Beispiel:
Expires: Thu, 15 Sep 2011 14:04:59 GMT
Last-Modified: Thu, 15 Sep 2011 13:04:59 GMT
Cache-Control: post-check=0, pre-check=0
Cache-control: private, no-cache
Pragma: no-cache

Hier sagt der Expires-header: Cache eine Stunde, während Cache-Control sag: Cache nicht, Widerspruch! Die WAF nimmt leider Expires-Header.

Ich hab dann etwas im Code gesucht und gefunden, dass default-Caching tatsächlich "no" ist, aber $this->_expires immer auf +3600 Sekunden gesetzt wird. Das wird dann in session.inc in:
default:
$rand = md5(mt_rand());
$mod_gmt = gmdate("D, d M Y H:i:s", time()-3600) . " GMT";

if ($this->_expires > 0)
{
header("Expires: ". gmdate("D, d M Y H:i:s", $this->_expires) . " GMT");
} else {
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
}

Das $mod_gmt ist da eh überflüssig und ich denke, es sollte nur
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
heißen.

Gibt es einen Grund, wieso da sich widersprechende Header gesetzt werden?

Vielen Dank im Voraus!
Jörn
Oldperl
Beiträge: 4316
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Cache-Control vs. Expires

Beitrag von Oldperl »

Hallo Jörn,

zuerst einmal willkommen im Contenido Forum. :)
JWester1 hat geschrieben:Gibt es einen Grund, wieso da sich widersprechende Header gesetzt werden?
  1. werden doch dort keine widersprechenden Header gesetzt, sondern nur entweder/oder, abhängig vom Wert in $this->_expires
  2. ist das eine Klasse der PHPLib und Contenido leitet davon seine eigenen Sessionklassen für Front- und Backend ab.
  3. Ja, die Variable $mod_gmt könnte ersatzlos entfallen, ist wohl irgendwann bei irgendwem mal während der Entwicklung übriggeblieben. Falls sie dich stört kannst du sie ja Löschen oder Auskommentieren.
Und nochmal zum eigentlichen Grund deines Ausfluges in den Contenido Core zu kommen, das Backend solltest du eigentlich garnicht Cachen, da es ja immerwährend dynamisch auf Daten zugreift, und für das Frontend würde ich den Header, falls wirklich technisch notwendig, in der zugehörigen FrontendSessionClass anpassen.

Gruß aus Franken

Ortwin
ConLite 3.0.0-dev, alternatives und stabiles Update von Contenido 4.8.x unter PHP 8.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
JWester1
Beiträge: 2
Registriert: Do 15. Sep 2011, 14:47
Kontaktdaten:

Re: Cache-Control vs. Expires

Beitrag von JWester1 »

Hallo Ortwin,
vielen Dank für deine Antwort!
Oldperl hat geschrieben:
  1. werden doch dort keine widersprechenden Header gesetzt, sondern nur entweder/oder, abhängig vom Wert in $this->_expires
Hm. Der Wert ist eigentlich immer positiv, damit wird 1h gecached. Und Cache-control sagt immer "no-cache", ist ja nicht in der if-Abfrage drin. Für mich widerspricht sich das.
Ich weiß, das ist wohl RFC-konform, weil bei HTTP 1.1 nur Cache-Control greifen sollte.
Oldperl hat geschrieben: [*]Ja, die Variable $mod_gmt könnte ersatzlos entfallen, ist wohl irgendwann bei irgendwem mal während der Entwicklung übriggeblieben. Falls sie dich stört kannst du sie ja Löschen oder Auskommentieren.[/list]
Nee, das stört mich jetzt nicht wirklich.
Oldperl hat geschrieben: Und nochmal zum eigentlichen Grund deines Ausfluges in den Contenido Core zu kommen, das Backend solltest du eigentlich garnicht Cachen, da es ja immerwährend dynamisch auf Daten zugreift, und für das Frontend würde ich den Header, falls wirklich technisch notwendig, in der zugehörigen FrontendSessionClass anpassen.
Was ich ja sagen will, dass das Backend eben sagt, "cache mich". Und das halte ich für falsch.
Oldperl hat geschrieben: Gruß aus Franken
Grüße aus Nürnberg. ;-)
Gesperrt