У меня есть сценарий 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, чтобы распечатать заголовки на странице, например:
Прагма-директива: без кеша
Кэш-директива: без кеша
Кэш-контроль: без кеша
Прагма: без кеширования
Истекает: 0
Местонахождение: /BACtrace.txt
Тип содержимого: текст / html
РЕДАКТИРОВАТЬ:
Оказывается, это была проблема с HTTP-сервером, который я использовал (busybox v1.12.1). Мне не удалось отправить заголовки HTTP, как было первоначально рекомендовано, но я смог заставить это работать с комбинацией META-тегов и настройки в IE8 (Инструменты -> Свойства обозревателя -> История просмотров -> Кнопка настроек - -> отметьте «Каждый раз, когда я посещаю веб-сайт»).
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\"/>"