Web服务器如何解释“.cgi”?

时间:2012-07-29 15:43:22

标签: perl web webserver cgi handler

我的问题是关于cgi。我想知道我是否将Perl脚本保存为.cgi文件,实际的机制是什么让服务器知道它是Perl脚本而不是别的什么?我知道源文件的开头有一个#!/usr/local/bin/perl,但它也是Perl编程语言的一部分,所以服务器在开始执行之前必须知道它是一个Perl脚本。

2 个答案:

答案 0 :(得分:3)

HTTP服务器通常只将send指定的文件发送给客户端。服务器的配置决定了运行哪些文件并返回它们的输出。

例如,流行的Apache httpd服务器的配置文件是httpd.conf,或者特别是其中一个文件Include d。它随软件版本,主机操作系统和分发而变化很大。

标准可以基于文件结构中文件的位置,也可以基于名称

这样的ScriptAlias指令
ScriptAlias /cgi-bin

表示/cgi-bin目录中的所有文件都将被视为CGI脚本。

或者,像

这样的AddHandler指令
AddHandler cgi-script .cgi

表示所有扩展名为.cgi的文件都将作为CGI脚本运行。

答案 1 :(得分:1)

如果服务器配置为识别.cgi后缀,则它只是执行文件,可能使用exec*() functions之一。

在类Unix系统上,如果文件是以#!开头的文本文件,那么系统内核​​本身将使用该行来确定要启动哪个解释器以将文件作为脚本运行。

您可以用任何解释语言编写CGI脚本(Perl,Python,bash,sh,ruby等等)。

就此而言,您可以将任何可执行文件用作CGI 脚本程序。如果编译C,C ++或Ada程序来创建可执行文件,则将其安装在文件名后缀为.cgi的相应目录中,Web服务器可以直接执行。这种情况并不常见,因为脚本语言往往对这种事情很方便,但是Web服务器并不关心它调用什么样的可执行文件,或内核如何调用它。

(Windows上的细节可能略有不同,通常使用文件扩展名来确定如何启动可执行文件。)