サーバー上でファイルを生成し、ブラウザをその新しく生成されたファイルにリダイレクトする CGI スクリプトがあります。
#!/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>"
ファイル /myspecialdir/foo には、/httpd/foo.html に入れたい動的コンテンツが含まれています。次に、新しいファイルの生成後にスクリプトがそこにリダイレクトされるようにします。
私が抱えている問題は、スクリプトがブラウザーからのすべてのヒットで新しいデータを取得しないことです。たとえば、IE で初めてhttp://myip/cgi-bin/genfoo.cgiにアクセスすると、データが生成され、foo.html にリダイレクトされます。その後、戻るボタンを使用して CGI ページに移動すると、再実行されず、古いデータにリダイレクトされます。
戻るボタンからでも CGI スクリプトを強制的に実行するにはどうすればよいですか?
編集: HTTP ヘッダー アプローチでこれを実行しようとしましたが、これは機能していないようです。これが新しいスクリプトです。何か不足していますか?
#!/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";
IE 経由でアクセスしたときにこれが行うことは、次のようにページのヘッダーを印刷することだけです。
プラグマ ディレクティブ: キャッシュなし
キャッシュ ディレクティブ: キャッシュなし
キャッシュ制御: キャッシュなし
プラグマ: no-cache
有効期限: 0
場所: /BACtrace.txt
コンテンツタイプ: text/html
編集:
これは、私が使用していた HTTP サーバー (busybox v1.12.1) の問題であることが判明しました。最初に推奨されたように HTTP ヘッダーを送信できませんでしたが、META タグと IE8 の設定 ([ツール] --> [インターネット オプション] --> [閲覧の履歴] --> [設定] ボタン) の組み合わせでこれを機能させることができました。 →「Web サイトにアクセスするたびに」にチェックを入れます。
私が使用したMETAタグは次のとおりです。
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\"/>"