【问题标题】:How does a web server interpret ".cgi"?Web 服务器如何解释“.cgi”?
【发布时间】:2012-07-27 11:22:21
【问题描述】:

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

【问题讨论】:

标签: perl web webserver cgi handler


【解决方案1】:

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

例如,流行的Apache httpd 服务器的配置文件是httpd.conf,或者特别是其中的一个文件Included。它随软件版本、主机操作系统和发行版的不同而有很大差异。

标准可以基于文件在文件结构中的位置,或者它的名称是什么。

类似ScriptAlias 的指令

ScriptAlias /cgi-bin

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

或者,AddHandler 指令,如

AddHandler cgi-script .cgi

表示所有带有.cgi 扩展名的文件将作为 CGI 脚本运行,无论它们在哪里。

【讨论】:

  • 这没有回答这个问题:“让服务器知道它是 Perl 脚本而不是其他东西的实际机制是什么?”
  • @brian:我认为它的意思是“服务器如何知道它是 CGI 脚本而不是文本资源”。也许我错了。希望OP会告诉我们。
【解决方案2】:

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

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

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

就此而言,您可以将任何可执行文件用作 CGI 脚本 程序。如果你编译一个 C、C++ 或 Ada 程序来创建一个可执行文件,然后将它安装在文件名后缀为 .cgi 的适当目录中,Web 服务器可以直接执行它。这并不常见,因为脚本语言往往更便于处理这类事情,但 Web 服务器并不关心它正在调用什么样的可执行文件,或者内核如何调用它。

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

【讨论】:

    猜你喜欢
    • 2010-10-11
    • 2017-07-25
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 2018-01-30
    • 1970-01-01
    • 2019-02-03
    • 2014-03-27
    相关资源
    最近更新 更多