perl作为一种语言和CGI脚本有什么区别?

时间:2014-11-14 11:16:14

标签: perl cgi

我正在学习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之间有什么区别?

2 个答案:

答案 0 :(得分:4)

CGI是一种标准方法或界面 - &#34; Common Gateway Interface&#34; - 用于与Web服务器通信的应用程序,并为客户端请求动态生成Web页面。

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

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

希望有所帮助。

答案 1 :(得分:3)

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功能。