HTTP 200 ist gut, aber HTTP 304 mit PHP ist auch nicht schlecht!

Wer möchte nicht ständig die Performance seiner Webapplikationen verbessern. Jedoch sollte man nicht nur ein Augenmerk für die Leistung der Anwendung haben, sondern sich auch der Bandbreitenoptimierung widmen. Geringe Bandbreite bedeutet nämlich auch einen schnelleren Seitenaufbau für den User.

HTTP 304 ist nicht wirklich ein Fehler, sondern gibt an, dass sich eine Ressource seit dem letzten Zugriff nicht geändert hat. HTTP 304 schickt dem Client nur Headerinformation ohne HTML im Body und das spart erheblich Bandbreite. Es macht nämlich keinen Sinn Dokumente wiederholt dem Client zu übertragen, wenn er diese bereits hat und nur wissen wollte, ob diese sich geändert haben. Hierfür schickt der Client dem Server If_Modified_Since Headers.

Ein Webserver unterstützt diese Methode bereits, aber jedoch nur für statische Dokumente wie Bilder oder reine HTML-Dateien. Bei Webanwendungen wie bspw. bei PHP ist der Entwickler gefragt. Ein Anwendungsszenario wäre bspw. das dynamische Generieren von Bildern, aber auch für generiertes HTML und JavaScript.

Ein vereinfachtes Beispiel mit PHP könnte folgendermaßen aussehen:

$headers = apache_request_headers();
if (
	isset($headers['If-Modified-Since'])
	&& strtotime($headers['If-Modified-Since']) == filemtime(__FILE__)
) {
	header(
		'Last-Modified: ' . gmdate(
			'D, d M Y H:i:s',
			filemtime(__FILE__)
		) . ' GMT',
		true, 304
	);
	exit;
}

Natürlich müsste filemtime( __FILE__ ) für das jeweilige Szenario angepasst werden, bspw. der Dateiname einer gecachten Datei oder auch der Timestamp aus einer Datenbank. Auch sollte eine Prüfung stattfinden, ob tatsächlich bei dynamischen Seiten derselbe Inhalt vom Client gefordert wird.

Kategorie: