Moin!
ich stehe auf dem Schlauch.
Wenn ich merke, dass der Client die neuste Version hat, dann header('304, aber kein Inhalt? Ich mein er braucht doch trotzdem einen Inhalt.
Hier mal etwas ausführlicher, wie das Hin und Her zwischen Client und Server so ablaufen könnte...
00:00 Uhr. Client wird frisch installiert, gestartet, hat nix im Cache, ist geradezu jungfräulich.
00:01 Uhr. Client ruft http://www.example.org/ auf. Der Request ist ein ganz normaler GET-Request ohne irgendwelche Bedingungen: "GET /".
00:02 Uhr. Der Server empfängt den Request. Er ermittelt, dass wohl die "index.html" auf seiner Festplatte gemeint ist, und schickt folgende Information im HTTP-Header mit: 1. Last-modified: "Ein Datum vor drei Monaten" und 2. Expires: in 1 Stunde und 30 Minuten.
00:03 Uhr. Der Client zeigt dem Benutzer die Seite und speichert sie natürlich auch im Cache.
Zeit vergeht...
01:00 Uhr. Der Client soll dem Benutzer wieder diese Startseite anzeigen. Da laut Expires-Header diese Seite noch gültig ist, wird kein Request an den Server geschickt, sondern direkt der Inhalt des Caches verwendet.
Zeit vergeht...
02:00 Uhr. Schon wieder der Aufruf dieser Startseite (und merkwürdigerweise immer im Stundentakt - wer sich das wohl ausgedacht hat). Der Browser hat zwar eine Seite im Cache, aber die ist seit einer halben Stunde als ungültig anzusehen. Da sie aber eine Angabe zu Last-modified hat, kann der Client einen Conditional-Request senden: "GET / If-modified-since 'Ein Datum vor drei Monaten'"
02:01 Uhr. Der Server empfängt den Request. Er ermittelt, dass wohl die "index.html" auf seiner Festplatte gemeint ist - da aber auch die Bedingung übermittelt wurde, prüft er zuerst mal, ob die Startseite seit dem in der Bedingung angegebenen Datum verändert wurde. Das ist nicht der Fall. Also antwortet er nur mit einem HTTP-Header ohne Inhalt, aber mit Status "304 Not modified".
02:02 Uhr. Der Client empfängt den Status 304 (ohne Inhalt). Er weiß damit, dass sein Cache-Inhalt immer noch aktuell ist, und zeigt ihn an. Das spart den Datentransfer des Seiteninhalts.
Wie kann ich herausfinden, welche header schon gesendet wurden?
Das kannst du mit PHP nicht herausfinden - außer du sendest mit PHP einen HTTP-Request an deinen eigenen Server und wertest aus, welche HTTP-Header der so versendet. Dieselbe Möglichkeit hättest du aber auch, wenn du deinen Browser benutzt, um dir die Header anzeigen zu lassen - oder ein anderes HTTP-fähiges Programm, dass diese Aufgabe erledigt.
Wenn du festgestellt hast, welche Header gesendet werden, und dir der Inhalt einiger davon nicht gefällt, wäre die nächste Aufgabe, die Ursache für diesen Header zu ermitteln (nicht alle Header, die mit der Ausgabe eines PHP-Skriptes mitgesendet werden, sind durch das PHP-Skript verursacht, einige werden auch durch entsprechende Konfiguration des Webservers initiiert), um dann deinen Wünschen entsprechend einzugreifen.
- Sven Rautenberg
"Love your nation - respect the others."