【问题标题】:What is the difference between perl as a language and CGI scripts?perl 作为一种语言和 CGI​​ 脚本有什么区别?
【发布时间】:2015-01-11 18:32:10
【问题描述】:

我正在学习 Perl 并试图了解 Perl 和 CGI​​ 之间的区别。我从this website 中找到了一些定义,上面写着,

"可以设置 HTTP 服务器,以便每当一个文件 在某个目录中请求不发回文件; 相反,它作为程序执行,并且无论该程序输出什么 发回给您的浏览器显示。这个函数被称为 通用网关接口或 CGI 和程序称为 CGI 脚本。”

所以我的问题是,不仅 CGI 脚本会作为执行文件发送,所有其他服务器脚本语言都会作为执行文件从 HTTP 服务器发送。那么,CGI 的主要目的是什么?

我很想知道答案,因为我真的很困惑。这个问题可能很愚蠢,但我需要知道答案。

例如:

#!/usr/bin/perl

print "Content-type:text/html\r\n\r\n";
print '<html>';
print '<head>';
print '<title>Hello Word - First CGI Program</title>';
print '</head>';
print '<body>';
print '<h2>Hello Word! This is my first CGI program</h2>';
print '</body>';
print '</html>';

1;

如果我将它保存在 .pl.cgi 扩展名中并运行这两个程序,我会得到相同的输出。那么cgi脚本和perl有什么区别呢?

【问题讨论】:

  • 简而言之:您可以使用任何编程语言进行CGI。 Perl 是一种编程语言。
  • 网络服务器可以运行任何可执行文件并将结果返回给浏览器。 Perl 曾经是(现在仍然是)一个常见的选择。但只是为了一笑,我用 C 编写了一个“CGI 脚本”。
  • @Sobrique “但为了一笑,我已经用 C 语言编写了一个‘CGI 脚本’”你的意思是什么。我在 C 中开发 CGI 程序以供工作。使用 C 是否有任何特殊问题,或者 perl 是否提供了一些优势。
  • 当涉及到大多数 CGI 脚本正在执行的文本处理密集型操作类型时,我发现 C 是一个糟糕的选择。通常它是一个 cgi 脚本,因为它是用一种脚本语言完成的 - 很少有你得到的东西与 need C 的性能紧密耦合,但也可以通过 web 提供服务。

标签: perl cgi


【解决方案1】:

CGI 是一种标准方法或接口——Common Gateway Interface”——用于应用程序与 Web 服务器通信并为客户端请求动态生成网页。

您的应用程序可能具有.cgi 扩展名这一事实主要取决于您的网络服务器配置。该应用程序可以具有.php.pl 扩展名,并配置为使用CGI 方法与您的Web 服务器一起运行。尽管.cgi 在某种程度上混淆了编写脚本所用的语言,但十多年来该语言通常是 perl。事实上,perl 包含了 CGI 库,以方便在 perl 中编写 CGI 应用程序。如果您是从命令行而不是通过 Web 服务器运行应用程序,那么解释器将出现在您的 *.cgi 脚本中,对于 perl CGI 应用程序将类似于:#!/usr/local/bin/perl。由于 CGI 的相对简单性,CGI 应用程序已经用多种语言编写——甚至是$SHELL 脚本。

CGI 已在很大程度上被进程内方法或以特定语言编写的完整 HTTP 服务器应用程序堆栈所取代(有时在代理服务器“后面”或 Web 服务器进程“内部”运行),主要是因为这些方法提供了改进的安全性和性能.在 perl 世界中,像 Plack 这样的应用程序框架是这种更现代的动态 Web 应用程序方法的一部分。 Plack 甚至包括Plack::App::WrapCGI,它可以“更新”您的 CGI 应用程序以在 Plack 框架内运行。

希望对您有所帮助。

【讨论】:

    【解决方案2】:

    Perl 和 CGI​​ 之间的关系经常被混淆,主要是因为它们经常一起出现。事实上,这种情况经常发生,以至于术语“Perl CGI”变得司空见惯。实际上,任何数量的编程语言都可以与通用网关接口一起使用。此外,Perl 是通过 cgi-bin 运行的,表明存在关系。如果这还不够,文件扩展名通常也是 .cgi。

    CGI 是一种标准,它通过可以用任何编程语言编写的 (CGI) 脚本在 Web 服务器(例如 Apache)和客户端之间提供接口。但是,经常使用脚本语言。 CGI 脚本接收来自客户端的请求,并调用适当的函数将结果返回给请求的客户端。有许多语言可以用作 CGI 语言,如 Perl、C、C++、Tcl、Unix Shell Script 等。然而,Perl 无疑是​​ CGI 脚本最常用的语言。

    虽然 PHP 语言作为服务器端语言的选择已经使 Perl 黯然失色(介于两者之间,而不是 Java 或 ASP),但 PHP 本身是用 C 语言编写的一组通用网关接口 (CGI) 二进制文件1994 年的编程语言,以取代他用来维护个人主页的一小部分 Perl 脚本。今天,您会发现几乎每个虚拟主机控制面板都内置了 CGI 脚本和 PHP 功能。

    【讨论】:

    • Web 服务器可以运行任何可执行的“CGI”脚本。 perl 有(很好地有)一个 CGI 模块并且是首选语言的事实使水变得浑浊。
    • 我们可以将脚本作为 perl 本身运行,为什么我们应该将其作为 cgi 运行?。这两种执行的主要区别是什么?
    • @VidhyaRaju - 主要区别在于 HTTP 和请求/响应以及 web 的存在。可以使用 CGI 创建响应,该响应使用网页或多或少类似于“控制台”,但您可能不想这样做。 CGI 脚本应在受限权限下运行,并应用于(Web)特定应用程序。
    猜你喜欢
    • 2011-02-14
    • 2011-03-03
    • 2011-03-29
    • 1970-01-01
    • 2020-03-17
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    相关资源
    最近更新 更多