我有一个 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 访问时,所有这些都是打印页面中的标题,如下所示:
Pragma-directive:无缓存
缓存指令:无缓存
缓存控制:无缓存
Pragma:无缓存
过期:0
位置:/BACtrace.txt
内容类型:文本/html
编辑:
事实证明这是我使用的 HTTP 服务器(busybox v1.12.1)的问题。我无法按照最初的建议发送 HTTP 标头,但我能够通过 META 标记和 IE8 中的设置(工具--> Internet 选项--> 浏览历史记录--> 设置按钮- -> 勾选“每次访问网站”)。
我使用的 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\"/>"