【Web】CGI简介

红太狼 2023-10-05 16:32 59阅读 0赞

什么是CGI

CGI的全称是Common Gateway Interface,通用网关接口。粗略地说,CGI就是位于服务器端的处理网页请求的程序。CGI程序本身是服务器操作系统上的一个简单的应用程序,它接受输入进行处理并输出内容,这些输入输出都又通过Web服务器软件(比如apache)处理,最终完成需要的功能。下图是CGI在整个网页服务中的位置:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ppYW5nd2VpMDUxMg_size_16_color_FFFFFF_t_70

CGI的编写

下面是一个CGI的基本示例:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. printf("Content-Type: text/html\n\n");
  5. printf("hello world!\n");
  6. return 0;
  7. }

这里使用了c语言的实现,可以看到它其实没有什么特别之处,但是还是需要说明几点:首先这里使用的printf就是往标准输出输出字符,不过Web服务器会进行处理转发,实际上当然不会打印到我们的终端;其次这里有一句特殊的打印“Content-Type: text/html\n\n”,它是告诉浏览器接收到的文件格式的,必须要加上否则会报错(500 Internal Server Error)。

之后编译也是使用最普通的方式:

  1. gcc test.c -o test.cgi

只是文件名称稍微修改了下。

为了使用该CGI程序,需要相关的浏览器和Web服务器支持,浏览器通常没有问题,Web服务器则需要安装,这里使用apache服务器。

安装apche和配置CGI

使用Ubuntu2004搭建服务器,首先需要安装httpd:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ppYW5nd2VpMDUxMg_size_16_color_FFFFFF_t_70 1

不过可以看到不能直接安装httpd,而是需要安装对应的软件包,这里就安装apache2,它是最常用的开源服务器,安装如下:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ppYW5nd2VpMDUxMg_size_16_color_FFFFFF_t_70 2

安装完成之后可以查看是否打开apache2服务器:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ppYW5nd2VpMDUxMg_size_16_color_FFFFFF_t_70 3

从上图可以看到已经打开了。为了进一步证明,最好的办法就是打开apache服务器的网页,我们可以直接使用本机的IP(127.0.0.1或localhost)来访问该服务器,如图所示:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ppYW5nd2VpMDUxMg_size_16_color_FFFFFF_t_70 4

到这里就说明apache服务器已经正常搭建。上述的网页其实就存放在如下的目录,当我们打开网页并输入本机地址之后,apache服务器就将该网页输出:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ppYW5nd2VpMDUxMg_size_16_color_FFFFFF_t_70 5

之后是配置CGI。apche服务器是支持CGI的,但是默认没有开启,注意下图中的两个目录:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ppYW5nd2VpMDUxMg_size_16_color_FFFFFF_t_70 6

mode-enabled目录下是当前开启的,而mod-available是当前支持的,如下所示,这里是有cgi相关的支持的:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ppYW5nd2VpMDUxMg_size_16_color_FFFFFF_t_70 7

我们需要将上面的cgid.conf,cgid.load和cgi.load映射到mod-enabled目录中,下面是具体的命令,注意需要使用root权限:

  1. ln -s /etc/apache2/mods-available/cgid.conf /etc/apache2/mods-enabled/cgid.conf
  2. ln -s /etc/apache2/mods-available/cgid.load /etc/apache2/mods-enabled/cgid.load
  3. ln -s /etc/apache2/mods-available/cgi.load /etc/apache2/mods-enabled/cgi.load

之后重启apache服务:

  1. /etc/init.d/apache2 restart

默认存放cgi程序的目录是/usr/lib/cgi-bin,后面新建的程序放在该目录即可使用,对应的网页是/cgi-bin/xxx.cgi。这里是相对路径,xxx.cgi是程序名。

CGI的使用

前面已经编译出了需要的CGI程序,只需要将该文件放到apache服务器指定的目录(cgi程序默认存放目录/usr/lib/cgi-bin)即可。之后就可以通过浏览器和apache服务器访问该CGI,如下所示:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ppYW5nd2VpMDUxMg_size_16_color_FFFFFF_t_70 8

以上就是CGI的简要说明。

发表评论

表情:
评论列表 (有 0 条评论,59人围观)

还没有评论,来说两句吧...

相关阅读

    相关 简介

    第一章:简介 (一)Redis介绍 Redis(全称:Remote Dictionary Server 远程字典服务)是一个开源的使用ANSI C语言编写、支持网络、可