Kontrolle des HTTP-Cachings mit Perl

Die HTTP Content Negotiation ist eine Standard-Prozedur, die leicht verändert werden kann, sei es vom anfragenden Client (Browser) oder dem antwortenden Server (Webserver). Als Erstes müssen Sie wissen, was Ihnen der jeweilige Web-Browser schickt.

Um Sie nicht in Verwirrung zu stürzen, sei darauf hingewiesen, das der Cache des Web-Browsers wenig bis gar nichts mit HTTP zu tun hat. Dies werden wir am Fall des Internet Explorer 6.0 unten zeigen.

Das Perl-Skript in Listing A
entspricht im Wesentlichen der Empfehlung in der perlipc-Manpage. Es kann zum Lesen der von einem Web-Browser geschickten Header benutzt werden. Dieses Skript muss auf Ihrem Webserver mit Administrator-Rechten (Windows) bzw. Root-Rechten (Linux/UNIX) ausgeführt werden. Alle vorhandenen Webserver, wie z. B. IIS oder Apache, müssen heruntergefahren sein.

Wenn Sie dieses Skript aufrufen, werden Sie feststellen, dass es anscheinend inaktiv ist und gar nichts tut. Öffnen Sie nun Ihren Web-Browser, und versuchen Sie, eine URL von diesem Server zu laden. Der Browser wird zwar hängen bleiben (kein Problem), aber das Skript wird den Header an den Server schicken. Dann bleibt auch das Skript hängen (ebenfalls kein Problem). Brechen Sie das Skript einfach ab, um neu zu starten, und geben Sie den Browser wieder frei. Auf jeden Fall haben Sie die Header, und darauf kommt es an. Hier einige der Header-Informationen, die der IE 6.0 liefert:


GET / HTTP/1.1
If-Modified-Since: Thu, 06 Jun 2002 06:49:32 GMT
If-None-Match: "340da-fa-3cff05fc"
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0;
Windows 98; TUCOWS)
Host: saturn
Connection: Keep-Alive

Zwei Punkte sind hierbei wichtig. Erstens: Egal, wie Sie die Cache-Einstellungen des IE 6.0 verändern, der Header bleibt derselbe. Der Browser-Cache auf Client-Seite (unter Extras | Internetoptionen | Allgemein | Temporäre Internetdateien | Einstellungen) ist irrelevant. Vergessen Sie ihn. Der zweite und wichtigere Punkt ist die Header-Zeile If-Modified-Since. Dieser Header verlangt zur Unterstützung der Cache-Strategie nach einem im HTTP-Response enthaltenen Datum der letzten Änderung. Ihr Programmcode sollte diese Datums-Information liefern.

Denken Sie daran, dass dieser Vorgang durchaus seinen Sinn hat. Die semantische Transparenz von HTTP hilft Ihnen, wenn Sie nicht mit Headern arbeiten. POST-Requests (abgeschickte Formulare) werden z. B. korrekt verarbeitet. Wenn Sie allerdings ein GET-Request verwenden oder den Response-Header eines POST-Request verändern, kann unvorhergesehenes Caching auftreten.

Nur der Vollständigkeit halber: Mozilla/Netscape liefert diesen If-Modified-Since-Header nur, wenn unter Bearbeiten | Einstellungen | Erweitert | Cache die Option „Wenn die Seite veraltet ist“ gewählt wurde. Für serverseitige Programmierer ist dies eine sicherere, wenn auch etwas simplere Browser-Strategie.

Themenseiten: Anwendungsentwicklung, Software

Fanden Sie diesen Artikel nützlich?
Content Loading ...
Whitepaper

Artikel empfehlen:

Neueste Kommentare 

Noch keine Kommentare zu Kontrolle des HTTP-Cachings mit Perl

Kommentar hinzufügen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *