什么是CGI

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

CGI的编写

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

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

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

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

gcc test.c -o test.cgi

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

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

安装apche和配置CGI

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

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

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

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

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

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

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

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

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

之后重启apache服务:

/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,如下所示:

以上就是CGI的简要说明。

【Web】CGI简介相关推荐

  1. 第一章 Web MVC简介 —— 跟开涛学SpringMVC

    第一章 Web MVC简介 -- 跟开涛学SpringMVC Web MVC简介 1.1.Web开发中的请求-响应模型: 在Web世界里,具体步骤如下: 1.  Web浏览器(如IE)发起请求,如访问 ...

  2. 第一章 Web MVC简介 —— 跟开涛学SpringMVC 博客分类: 跟开涛学SpringMVC webmvcjavaeespring跟开涛学SpringMVC Web MVC简介 1.1、We

    第一章 Web MVC简介 -- 跟开涛学SpringMVC 博客分类: 跟开涛学SpringMVC webmvcjavaeespring跟开涛学SpringMVC Web MVC简介 1.1.Web ...

  3. web安全简介_Web安全:HTTP简介

    web安全简介 by Alex Nadalin 通过亚历克斯·纳达林 Web安全:HTTP简介 (Web Security: an introduction to HTTP) This is part ...

  4. Tim Berners-Lee重新分散的新Web SOLID简介

    by Arnav Bansal 通过Arnav Bansal Tim Berners-Lee重新分散的新Web SOLID简介 (An introduction to SOLID, Tim Berne ...

  5. 《jQuery与JavaScript入门经典》——第 1 章 动态Web编程简介 1.1理解Web服务器浏览器范式...

    本节书摘来自异步社区<jQuery与JavaScript入门经典>一书中的第1章,第1.1节,作者:[美]Brad Dayley著,更多章节内容可以访问云栖社区"异步社区&quo ...

  6. web API简介(二):客户端储存之document.cookie API

    概述 前篇:web API简介(一):API,Ajax和Fetch 客户端储存从某一方面来说和动态网站差不多.动态网站是用服务端来储存数据,而客户端储存是用客户端来储存数据.document.cook ...

  7. J2EE基础之Web服务简介

    J2EE基础之Web服务简介 1.什么是Web服务? 在人们的日常生活中,经常会查询网页上某城市的天气信息,这些信息都是动态的.实时的,它是专业的气象站提供的一种服务.例如,在网上购物时,通常采用网上 ...

  8. JavaScript(五)—— Web APIs 简介/JavaScript 必须掌握的 DOM 操作 (丰富案例 + 思维导图)

    本篇为 JavaScript 系列笔记第五篇,将陆续更新后续内容.参考:黑马程序员JavaScript核心教程,前端基础教程 系列笔记: JavaScript(一)-- 初识JavaScript / ...

  9. amazeui学习笔记二(进阶开发2)--Web组件简介Web Component

    amazeui学习笔记二(进阶开发2)--Web组件简介Web Component 一.总结 1.amaze ui:amaze ui是一个web 组件, 由模板(hbs).样式(LESS).交互(JS ...

  10. Web APIs 简介

    Web APIs 简介 1 Web APIs 和 JS 基础关联性 1.1 JS 的组成 1.2 JS 基础阶段以及 Web APIs 阶段 JS 基础阶段 我们学习的是 ECMAScript 标准规 ...

最新文章

  1. zw版【转发·台湾nvp系列Delphi例程】HALCON SmoothImage
  2. ssh mysql环境搭建_搭建一个MySQL高可用架构集群环境
  3. Python:赋值语句和布尔值
  4. 【Python基础】用Python制作漂亮的流动桑基图
  5. 案例展示快做好了(更新)
  6. springmvc使用freemarker
  7. 【HAOI2010】工厂选址题解
  8. 第一步_安装VMware虚拟机和搭载ubuntu系统
  9. Android UI(一)Layout 背景局部Shape圆角设计
  10. python读取excel在web中显示_在网页中预览excel表格文件
  11. JavaScript学习指南(非常详细)
  12. TCP长连接开发相关,调试工具SocketTool与框架GatewayWorker
  13. struts2上传 zip和rar文件类型
  14. 小米盒子 android 投影仪,小米盒子连接投影仪方法
  15. Coverity 2018,Coverity2019使用教程
  16. 通过 BT 种子 Hash 值从 BitComet 服务器上下载种子文件
  17. 解析g代码c语言程序
  18. 国内IT界5大女神程序员,你知道几个
  19. 深入探究 null 和 undefined 区别
  20. 一键重装系统win8图文教程

热门文章

  1. Android视频录制
  2. 投稿英文国际会议论文经验总结
  3. mysql 备份 access_备份access数据库
  4. 华为云买网站买另外服务器,华为云网站在买其他服务器
  5. python画一个正方形和圆_python用正方形画圆|怎么用matlab画出一个正方形?
  6. Qt自定义控件--QQ表情
  7. 利用C++创建一个游戏(1)窗口框架(代码+注释)
  8. linux bin目录在哪,Linux 基础知识 /bin,/sbin,/usr/sbin,/usr/bin 目录 区别详解
  9. 通讯录管理系统(C语言版)
  10. [RK3288][Android6.0] 用户空间对音频寄存器的控制