Ich habe ein CGI-Skript, das eine Datei auf dem Server generiert und den Browser dann an diese neu generierte Datei weiterleitet.CGI-Skript, das nicht bei jedem Seitenaufruf ausgeführt wird
#!/bin/bash
printf "Content-type: text/html\n\n";
cat /myspecialdir/foo > /httpd/foo.html
echo "<HTML><HEAD><BODY>"
echo "<META HTTP-EQUIV=\"CACHE-CONTROL\" CONTENT=\"NO-CACHE\">"
echo "<META HTTP-EQUIV=\"Refresh\" CONTENT=\"1; URL=/foo.html\">"
echo "</BODY></HEAD></HTML>"
Die Datei/myspecialdir/foo enthält einige dynamische Inhalte, die ich in /httpd/foo.html sein wollen. Ich möchte dann, dass das Skript nach der Generierung der neuen Datei dorthin umleitet.
Das Problem, das ich habe, ist, dass das Skript keine neuen Daten bei jedem Treffer von einem Browser erhält. Zum Beispiel, wenn ich http://myip/cgi-bin/genfoo.cgi das erste Mal in IE besuche, werden die Daten generiert und es wird zu foo.html umgeleitet. Wenn ich dann mit der Zurück-Schaltfläche zur CGI-Seite gehe, wird sie nicht erneut ausgeführt und ich werde zu veralteten Daten weitergeleitet.
Wie kann ich das CGI-Skript zwingen, sogar von der Zurück-Taste auszuführen?
EDIT: Ich habe versucht, dies mit dem HTTP-Header-Ansatz, aber das scheint nicht zu funktionieren. Hier ist das neue Skript, vermisse ich etwas?
#!/bin/bash
cat /myspecialdir/foo > /httpd/foo.txt
printf "Pragma-directive: no-cache\n\n";
printf "Cache-directive: no-cache\n\n";
printf "Cache-control: no-cache\n\n";
printf "Pragma: no-cache\n\n";
printf "Expires: 0\n\n";
printf "Location: /foo.txt\n\n";
printf "Content-type: text/html\n\n";
All dies tut, wenn ich zu Besuch über IE die Header in der Seite zu drucken ist, etwa so:
Pragma-Direktive: no-cache
Cache-Direktive: no-cache
Cache-control: no-cache
Pragma: no-cache
Ex Pires: 0
Ort: /BACtrace.txt
Content-type: text/html
EDIT:
Es stellt sich heraus, das ein Problem mit dem HTTP-Server war ich wurde mit (busybox v1.12.1). Ich konnte die HTTP-Header nicht wie ursprünglich empfohlen senden, aber ich konnte das mit einer Kombination von META-Tags und einer Einstellung in IE8 (Extras -> Internetoptionen -> Browserverlauf -> Einstellungen-Taste - -> check "Jedes Mal, wenn ich eine Website besuche").
Die META-Tags I verwendet werden, sind:
echo "<meta http-equiv=\"expires\" content=\"0\" />"
echo "<META HTTP-EQUIV=\"Pragma-directive\" CONTENT=\"no-cache\"/>"
echo "<META HTTP-EQUIV=\"Cache-directive\" CONTENT=\"no-cache\"/>"
echo "<META HTTP-EQUIV=\"Cache-control\" CONTENT=\"no-cache\"/>"
echo "<META HTTP-EQUIV=\"Pragma\" CONTENT=\"no-cache\"/>"
echo "<META HTTP-EQUIV=\"Refresh\" CONTENT=\"1; URL=/foo.txt\"/>"
Sorry, Sean, aber das doesn‘ t umleiten. Es wird nur "Ort:/foo.html" im Browser gedruckt. Fehle ich etwas? Das neue Skript lautet: #!/Bin/ash cat/meinspecialdir/foo> /httpd/foo.txt printf "Ort: /foo.txt\r\n"; printf "Pragma-Direktive: no-cache \ r \ n" printf "Cache-Direktive: no-cache \ r \ n" printf "Cache-Kontrolle: no-cache \ r \ n" printf "Pragma: no-cache \ r \ n " printf" Ablauf: 0 \ r \ n " – cigarman
Siehe meine Bearbeitung für Details. –
Danke für die Klarstellung, Sean. Es sieht so aus, als ob der Server, den ich benutze (httpd von einer älteren BusyBox), dies durchbricht, weil er automatisch den Header Content-type: text/plain sendet, der verhindert, dass mein Skript Header sendet. Also, ich muss META-Tags verwenden. – cigarman