当用户请求HTML页面时,如何调用Perl CGI脚本?

当HTML页面被请求到服务器时,有没有办法调用Perl CGI脚本?

就像一个脚本可以绑定到一个动作,是否有一个脚本绑定到“请求页面”

Perl CGI程序是否被调用主要取决于服务器configuration和资源path的“path”部分。

Perl CGI脚本可能会返回HTML(通常情况就是这样)。 因此,即使URL不包含“.html”,请求脚本通常也会有效地请求html页面。

如果URL是http://www.example.com/cgi-bin/myscript.html,我怀疑大多数Web服务器会试图查看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

当HTML页面被请求到服务器时,有没有办法调用Perl-CGI脚本?

是。

有几种可能的方式,取决于你想达到什么目的。 例如:当/htdocs/docs2/doc1.html被调用时,你正试图执行/cgi-bin/script1

  1. 如果您的目标是简单加载主doc1.html ,而不影响HTML页面 – 执行一个单独的CGI脚本(这是计数器如何工作),您确保doc1.html包含一些HTML或JavaScript调用URL /cgi-bin/script1

    同样,这种方法适用于不想通过CGI脚本生成HTML的情况。 和doc1.html是一个真正的HTML文件,你想加载。

    有几种方法可以做到这一点:

    • 在HTML的主体上有一个“onload”属性,对CGI URL进行asynchronousAJAX调用。

      对于coures,它可以是页面中的任何JS脚本代码,而不仅仅是一个“onload”,只要你不关心CGI在页面加载完成之前执行。

    • 让网页包含一个图像(如果你希望它被隐藏,使用老派技术使用1×1透明的GIF,或使图像的CSS display属性值“隐藏”,使用更现代的方法)。 图像的src属性的值应该是您的CGI脚本的URL。 如果图像实际上应该是可见的,那么CGI脚本应该返回一个HTTPredirect响应,指向实际图像的URL。

      请注意,这几乎是所有的页面计数器如何在networking的旧时代工作(他们仍然可能,尽pipe我今天随机猜测他们更可能是AJAXy事务,而不是使用一些谷歌分析的东西)。

    • 非常类似于最后一个,但是使用隐藏的<IFRAME>其“src”属性指向CGI脚本。

    显然后面的两种方法(IFRAME或IMG)是同步的,例如,你的页面不会100%完成加载图像或框架,直到CGI脚本完成发送它的HTTP响应。 而前者可以是同步或asynchronousXMLHTTPRequest(aka AJAX)调用。

    其余的方法处理获取HTML文件INSTEAD的CGI脚本。

  2. 让“doc1.html”只包含一个redirect(通常是META HTTP刷新,或一个JavaScript片段更改window.location值)到CGI URL。 然后让CGI脚本产生一个HTTP响应,它返回所需的HTML,或者返回一个HTTPredirect到不同的HTML页面。

  3. 如果你正在运行Apache,你实际上可以自定义重写URL,例如使用mod_rewrite; 从而在内部为您提供Web服务器别名/htdocs/docs2/doc1.html/cgi-bin/script1

  4. 您也可以通过更改Web服务器configuration来完成一个完全UEL重写的稍微不同的版本,以便“docs2”是一个有效的CGI目录以及“cgi-bin”(唯一让cgi-bin特别的是您的Web服务器有一个configuration条目,说明它是一个CGI脚本目录); 然后将软件别名dic1.html转换为script1。

    恕我直言,不是一个非常有用或很好的方法,但它可能是某些情况下最简单和最好的方法。

我假设你想提供一个普通的HTML文件,并在后台放置一些Perl CGI脚本。

有点老式,但你可以使用SSI像<!--#exec cgi="/cgi.pl" -->

可以在JavaScript中做类似的事情(可能使用onload或隐藏的表单提交)。