Moin Moin !
telnet webserver 80
Trying 10.1.128.167...
Connected to webserver.
Escape character is '^]'.
GET /cgi-bin/mycgi.pl HTTP/1.0
HTTP/1.1 200 OK
Date: Tue, 03 Sep 2002 17:50:11 GMT
Server: Apache/1.3.22 (Win32)
Expires: Mon, 02 Sep 2002 17:50:15 GMT
Pragma: nocache
Connection: close
Content-Type: text/html
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
[...]
Oder in Perl:
use CGI qw(header);
print header({-expires=>'-1d',-pragma=>'nocache'});
Das funktioniert hervorragend mit den verschiedensten Browsern (getestet mit IE ab 4, NN ab 4.0x, Opera ab 3.x, Mozilla).
Wie es geht: Erstmal sag ich mit pragma=>nocache, das der Browser diesen Request besser nicht in den Cache packt. Dann sorge ich mit expires=>-1d noch dafür, daß die Seite vor 24 Stunden veraltet ist. "Cache-Control: no-cache" oder so könnte man auch noch einbauen.
Ansonsten müßtest Du deine HTML-Seiten dynamisch auf dem Server erzeugen, und dafür sorgen, daß in dem IMG-Tag immer ein Teil der URL veränderlich ist. Das kann der Browser dann nicht mehr cachen.
Mit SSI (und Apache) müßte das ungefähr so gehen:
<!--#config timefmt="%s" --><!-- Sekunden seit der Epoche -->
<IMG SRC="/cgi-bin/statistik.cgi/<!--#echo encoding="url" var="DATE_GMT" -->/<!--#echo encoding="url" var="REMOTE_ADDR" -->" ALT="Just a counter">
Das CGI bekommt als PATH_INFO die Aufrufzeit der SSI-Seite und die Remote IP-Adresse, getrennt durch Slashes. Die Aufrufzeit ist nützlich, um die Ladezeiten abzuschätzen, die IP-Adresse zum Verfolgen der User. Eine Zufallszahl wäre noch ganz nett, aber dafür braucht man bei SSI externe Prozesse, die in der Performance recht teuer sind. Ansatz: <!--#exec cmd="/usr/local/bin/perl -e 'print rand'" --> oder <!--#include virtual="/cgi-bin/internal/random" -->
Alexander