当向服务器请求 HTML 页面时,有没有办法调用 Perl CGI 脚本?
就像脚本可以与动作绑定一样,有没有办法将脚本与“页面请求”绑定在一起
答案1
Perl CGI 程序是否被调用主要取决于服务器配置和资源路径的“路径”部分。
Perl CGI 脚本可能会返回 HTML(通常情况如此)。因此,请求脚本通常实际上是请求 html 页面,即使 URL 不包含“.html”。
如果 URL 是http://www.example.com/cgi-bin/myscript.html我怀疑大多数网络服务器都会尝试查看 myscript.html 是否是某种可运行的程序或脚本。
也可以看看http://httpd.apache.org/docs/2.0/howto/cgi.html特别是“ScriptAlias 目录之外的 CGI”
要默默地将 /some/path/foo.html 更改为 /other/path/bar.cgi 请参阅http://httpd.apache.org/docs/2.0/misc/rewriteguide.html
答案2
当向服务器请求 HTML 页面时,有没有办法调用 Perl-CGI 脚本?
是的。
有几种可能的方法,具体取决于您想要实现的目标。例如:您正在尝试执行调用/cgi-bin/script1
时/htdocs/docs2/doc1.html
。
如果您的目标只是在不影响 HTML 页面的情况下加载主程序
doc1.html
,同时执行单独的 CGI 脚本(这是计数器的工作方式),请确保doc1.html
包含一些调用 URL 的 HTML 或 JavaScript 代码/cgi-bin/script1
。再次强调,此方法适用于您不想通过 CGI 脚本生成任何 HTML 的情况;并且
doc1.html
您希望加载实际的 HTML 文档。有几种方法可以做到这一点:
HTML 主体上有一个“onload”属性,它对 CGI URL 进行异步 AJAX 调用。
当然,它可以是页面中的任何 JS 脚本代码,而不仅仅是“onload”,只要您不关心 CGI 是否在页面加载完成之前执行。
让网页包含图像(如果您希望图像被隐藏,请使用老式技术制作 1x1 透明 GIF,或者使用
display
更现代的方法将图像的 CSS 属性值设为“隐藏”)。图像的属性值src
应该是 CGI 脚本的 URL。如果图像实际上是可见的,CGI 脚本应该返回指向实际图像 URL 的 HTTP 重定向响应。请注意,这基本上就是 Web 旧时代所有页面计数器的工作方式(它们现在可能仍然如此,但我猜测现在它们更有可能是 AJAXy 事务,而不是使用一些 Google Analytics 东西)。
与上一个非常相似,但使用隐藏
<IFRAME>
,其“src”属性指向 CGI 脚本。
显然,后两种方法(IFRAME 或 IMG)都是同步的,例如,在 CGI 脚本完成发送其 HTTP 响应之前,您的页面不会 100% 完成图像或框架的加载;而前者可以是同步或异步 XMLHTTPRequest(又名 AJAX)调用。
其余方法处理执行的 CGI 脚本而不是 HTML 文件。
让“doc1.html”仅包含指向 CGI URL 的重定向(通常是 META HTTP 刷新,或 JavaScript 代码片段更改
window.location
值)。然后让 CGI 脚本生成 HTTP 响应,该响应要么返回所需的 HTML,要么返回指向不同 HTML 页面的 HTTP 重定向。如果您正在运行 Apache,您实际上可以自定义重写 URL,例如使用 mod_rewrite;从而在内部为您提供 Web 服务器
/htdocs/docs2/doc1.html
别名/cgi-bin/script1
。您还可以通过更改 Web 服务器配置来执行完全 UEL 重写的略微不同的版本,以便“docs2”与“cgi-bin”一起成为有效的 CGI 目录(使 cgi-bin 变得特殊的唯一原因是您的 Web 服务器具有配置条目,表明它是一个 CGI 脚本目录);然后将 dic1.html 软别名改为 script1。
恕我直言,这不是一个非常有用或好的方法,但对于某些场景来说它可能是最简单和最好的方法。
答案3
我假设您想要提供一个纯 HTML 文件,并在后台运行一些 Perl CGI 脚本。
有点过时,但你可以使用 SSI<!--#exec cgi="/cgi.pl" -->
可以在 JavaScript 中做类似的事情(可能带有onload
隐藏表单提交)。