cgi bin CGI脚本不会执行每次页面访问

更新时间:2024-04-26 下载TXT文档 下载Word文档

我有一个CGI脚本,该脚本在服务器上生成一个文件,然后将浏览器重定向到该新生成的文件。

#!/bin/bash
printf"Content-type: text/html\
\
";
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\
\
";
printf"Cache-directive: no-cache\
\
";
printf"Cache-control: no-cache\
\
";
printf"Pragma: no-cache\
\
";
printf"Expires: 0\
\
";
printf"Location: /foo.txt\
\
";
printf"Content-type: text/html\
\
";

当我通过IE访问时,所有要做的就是在页面中打印标题,如下所示:

实用指令:无缓存

缓存指令:无缓存

缓存控制:无缓存

编译指示:无缓存

有效期:0 短码网-DuanMa.NET

位置:/BACtrace.txt

内容类型:text / 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"/>"

这不会回答您的问题,请随时投下反对票,但是您可以这样做:

#!/bin/bash

cat /myspecialdir/foo > /httpd/foo.html

printf"Location: /foo.html\
\
";

这将向浏览器发送一个标头,告诉它重定向到/foo.html,而不必加载和解析<meta>标签。

编辑:您应该仅在每个标头的末尾发送1个\
。在整个请求之后,您将发送其中两个(如下所示(为清楚起见而细分)):

#!/bin/bash
cat /myspecialdir/foo > /httpd/foo.txt
printf"Pragma-directive: no-cache\
";
printf"Cache-directive: no-cache\
";
printf"Cache-control: no-cache\
";
printf"Pragma: no-cache\
";
printf"Expires: 0\
";
printf"Location: /foo.txt\
";
printf"\
";

(还请注意,不包括Content-Type标头)

  • 抱歉,肖恩,但是那不会重定向。所有要做的就是在浏览器中打印" Location:/foo.html"。我想念什么吗?新脚本为:#!/ bin / ash cat / myspecialdir / foo> /httpd/foo.txt printf"位置:/foo.txt \\
    \\
    "; printf"实用指令:无缓存\\
    \\
    " printf"缓存指令:无缓存\\
    \\
    " printf"缓存控制:无缓存\\
    \\
    " printf"编译指示:无缓存\\
    \\
    " printf"到期:0 \\
    \\
    "
  • 谢谢您的澄清,肖恩。看起来我正在使用的服务器(来自较旧BusyBox的httpd)打破了这一点,因为它会自动发送Content-type:text / plain标头,从而阻止了我的脚本发送标头。因此,不幸的是,我必须使用META标签。

您需要告诉浏览器(和可能的代理)以适当的HTTP标头禁用文件缓存:

Pragma-directive: no-cache
Cache-directive: no-cache
Cache-control: no-cache
Pragma: no-cache
Expires: 0

当然,您只需将它们添加到脚本中,如下所示:

printf"Pragma-directive: no-cache\
\
";

这些指令中有很多冗余。所有这些可能都不是必需的,但是最好确保所有浏览器和代理都能理解其中的某些内容。

以上就是短码网小编为大家整理的《cgi bin CGI脚本不会执行每次页面访问》相关内容,希望大家喜欢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若内容造成侵权/违法违规/事实不符,请将联系本站反馈,一经查实,立即处理!

cgi bin CGI脚本不会执行每次页面访问》文档下载仅供参考学习,下载后请在24小时内删除。

转载注明出处:https://www.duanma.net/article/cfc2d263265.html

回到顶部