CGI(通用网关接口)可能是一组标准,概述了在线服务器上发生的数据更改,但将在线用户的请求传递给了“护理助理”应用程序,并将数据接收回给用户。当任何用户请求网页时,服务器将发送回所请求的页面。 Web服务器通常将表单信息传递给处理数据的小型应用程序,并可以发送回确认消息。这种在服务器和应用程序之间来回传递知识的方法或约定被称为通用主接口(CGI),并且是Web超文本传输协议(HTTP)的元素。
通用主界面(CGI)可以是用于在在线服务器上运行脚本和程序的一组规则。它指定在联机服务器和客户端的网络浏览器之间通信的数据以及数据的传输方式。大多数网络服务器在服务器上每个网站的根文件夹中都包含一个cgi-bin目录。在此目录中放置的所有脚本都应遵循通用主界面的原则。例如,位于cgi-bin目录中的脚本也被赋予了可行的权限,而该目录外部的文件可能不被允许执行。 CGI脚本还可以请求CGI环境变量,例如SERVER_PROTOCOL和REMOTE_HOST,它们可以用作脚本的输入变量。
由于CGI可能是普通接口,因此它将用于多种硬件平台上,并得到许多不同的网络服务器软件包(例如Apache和Windows Server)的支持。 CGI脚本和程序也可以用许多完全不同的语言编写,例如C++, Java和Perl。尽管有几个网站仍使用CGI来运行程序和脚本,但是开发人员现在经常将脚本直接包含在Web页面中。这些脚本是用PHP和ASP之类的语言编写的区域单元,是在加载页面之前在服务器上处理的区域单元,随后的知识也已传送到用户的浏览器。
浏览网页
为了了解CGI的思想,让我们看一下用户在使用特定地址在线浏览一件东西后发生的事务状态。
- 您使用的浏览器会与HTTP Web服务器联系,并要求提供URL。
- Web服务器将解析URL并搜索文件名;如果找到了请求的文件,则立即将该文件发送回浏览器,否则发送错误消息。
- Web浏览器从Web服务器获取响应,并显示接收到的文件或错误消息。
- 如果正在开发网站,并且需要CGI应用程序来控制,则可以在HTML文件中的代码中指定URL(统一资源定位符)中的应用程序名称。
服务器端配置
在使用CGI编程之前,程序员应确保Web服务器支持CGI,并且配置正确以处理CGI程序。按照惯例,CGI文件是.cgi的扩展名,尽管它们是C++可执行文件。默认情况下,Apache Web Server配置为在以下环境中运行CGI程序
/var/www/cgi-bin
程序员需要启动并运行Web服务器才能运行任何CGI程序,例如Perl,shell等。
使用C++的CGI程序示例
// C++ example of CGI program
#include
using namespace std;
int main()
{
cout << "Content-type:text/html\r\n\r\n";
cout << "\n";
cout << "\n";
cout << "Hello TutorialsCloud \n";
cout << "\n";
cout << "\n";
cout << " First CGI program \n";
cout << "\n";
cout << "\n";
return 0;
}
Content-type:text/html
First CGI program
- 编译以上程序,并为该可执行文件加上合适的名称以及扩展名.cgi 。
- 该文件需要保存在
/var/www/cgi-bin directory
并且具有以下内容。
- CGI程序中经常使用的一些其他HTTP标头是:
- Content-type :这是一个MIME字符串,它定义了要返回的文件的格式。
- 过期:日期:它定义当前网页信息变为无效的日期。
- 位置:URL :必须返回的URL,而不是所请求的URL。
- 上次修改日期:日期:资源上次修改的日期。
- Content-length:N :要返回的数据的长度(以字节为单位)。浏览器使用此值“ N”报告估计的下载时间。
- Set-Cookie:字符串:用于设置通过字符串传递的cookie
CGI环境变量
- CONTENT_LENGTH :(可选)以字节为单位提供长度。它仅适用于POST请求。
- CONTENT_TYPE :可选地提供内容的种类,即内容的数据类型。
- HTTP_COOKIE :如果在尝试键入的类型中已经准备好访问者的cookie,请返回该访问者的cookie。
- HTTP_USER_AGENT :访问者的浏览器类型。它的请求标头字段包含有关发起请求的用户代理的信息。
- PATH_INFO :提供CGI脚本的跟踪。
- REMOTE_ADDR :访问者的科学地址,即创建请求的远程主机的科学地址。
- REMOTE_HOST :访问者的主机名,即创建请求的主机的完全限定名称