У меня есть сценарий CGI, который генерирует файл на сервере, а затем перенаправляет браузер на этот вновь созданный файл.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. Затем я хочу, чтобы сценарий перенаправлялся туда после генерации нового файла.
Проблема заключается в том, что скрипт не получает новые данные при каждом ударе из браузера. Например, если я нахожусь в http://myip/cgi-bin/genfoo.cgi в первый раз в IE, данные генерируются и перенаправляются на foo.html. После этого, если я перейду на страницу CGI с помощью кнопки «Назад», она не будет повторно запущена, и я перенаправлен на устаревшие данные.
Как заставить скрипт CGI выполнять даже с помощью кнопки «Назад»?
EDIT: Я попытался сделать это с использованием подхода 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 является не печатать заголовки на странице, например, так:
Pragma директивы: НЕТ КЭШИРОВАНИЯ
Cache-директива: нет кэша
Cache-контроль: нет кэша
Pragma: нет кэша
Ex Пирес: 0
Расположение: /BACtrace.txt
Content-тип: текст/html
EDIT:
Оказывается, это была проблема с сервером HTTP, который я использовал (busybox v1.12.1). Мне не удалось отправить HTTP-заголовки, как первоначально было рекомендовано, но я смог заставить это работать с комбинацией тегов META и настройки в IE8 (Инструменты -> Свойства обозревателя -> История просмотра -> Кнопка настроек - -> проверить «Каждый раз, когда я посещаю сайт»).
мета-теги, которые я использовал являются:
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\"/>"
К сожалению, Шон, но это Безразлично» t перенаправить. Все, что делает, это печать «Расположение: /foo.html» в браузере. Я что-то упускаю? Новый сценарий: #!/Bin/ash cat/myspecialdir/foo> /httpd/foo.txt printf "Местоположение: /foo.txt\r\n"; printf "Директива Pragma: no-cache \ r \ n" printf "Кэш-директива: no-cache \ r \ n" printf "Cache-control: no-cache \ r \ n" printf "Pragma: no-cache \ r \ n " printf" Истекает: 0 \ r \ n " – cigarman
См. мое редактирование для деталей. –
Спасибо за разъяснение, Шон. Похоже, что сервер, который я использую (httpd из более старого BusyBox), разбивает это, потому что он автоматически отправляет заголовок Content-type: text/plain, который мешает моему сценарию отправлять заголовки. Поэтому, не забудьте, я должен использовать теги META. – cigarman