为什么要CGI
因为一旦您使用了ASP,那么您就只能吊在微软的WINDOWS和IIS这棵树上。
ASP是微软的专有技术,ASP调用微软独有的系统和应用函数,只能在微软的操作系统和服务器下运行。有商业软件可以实现在APACHE下运行ASP,但是有附加费用和兼容性问题。而CGI则不同,它并不是一种技术,而是一个服务器与应用程序接口的公共标准。CGI程序能够被移植到任何操作系统和服务器下运行,不存在被操作系统和服务器供应商锁定的问题。众所周知,微软的WINDOWS NT与2000,都是从桌面操作系统发展而来的,尚未摆脱单人单机的设计思想的束缚,至到目前为止,NT/2000在安全性与稳定性方面仍然存在很大的漏洞和问题。最近的中美黑客大战中,被攻克的网站99%都是使用微软的系统。微软的操作系统和服务器安全漏洞之大令人触目惊心。只要到http://www.cert.org一看,就能找到最新发现的各种IIS漏洞,个个都足以致网站于死命。一个业余的电脑爱好者能够通过简单的访问一个URL就能用UNICODE、SADMIND等缺陷,把一个IIS网站改得面目全非,甚至全部摧毁。根据NETACRAFT(http://www.netcraft.com)对41个IIS网站的测试,三分之一的IIS网站存在明显漏洞。NETCRAFT估计有几十万个IIS网站已被黑客控制,随时可以被摧毁或利用,而网站管理员毫无知觉。相比之下,UNIX操作系统从一开始就是一个设计成永不关机的、多用户、多进程的操作系统,其安全性、稳定性在长期、广泛的使用中得到了实践的检验。
CGI是一个开放标准(OPEN STANDARDS)而不是专有技术,所有的WEB服务器,如APACHE,IIS,I-PLANET,NETSCAPE,ZEUS,都支持这一标准。CGI的高度安全和高度稳定,使它成为目前互联网上应用最广泛、最可靠的技术,随便在网上浏览,到处可见CGI的应用,没用CGI的是少数。如:
- 美国总统白宫:
(http://www.whitehouse.gov/cgi-bin/good-bye.cgi?url=http://www.firstgov.gov/) - 美国国会:
(http://www.senate.gov/cgi-bin/exitmsg?url=http://www.house.gov/) - 美国银行(BANK OF AMERICA) 在线银行,有三百万用户,是美国最大的在线银行:
https://onlineid.bankofamerica.com/cgi-bin/sso.login.controller - 微软自己的hotmail邮件服务和passport登录(在全世界有数千万用户),1997年微软试图把hotmail换成微软的技术,但是无法应付数千万用户的负载,最后不得不改回使用CGI,目前hotmail在美国就有三千四百万用户,是最大的邮件服务,也是微软引以为傲的拳头产品:
http://lc1.law13.hotmail.passport.com/cgi-bin/login
http://pv1fd.pav1.hotmail.msn.com/cgi-bin/hmhome? - 中国海尔的网上商城 :http://www.ehaier.com/cgi-bin/prod_zdtj4.htm
- 美国海军网站搜索引擎:http://www.chinfo.navy.mil/cgi-bin/htsearch
- E*TRADE (网上股票证券交易):
(http://www.etrade.ne.jp/cgi-bin/gx.cgi/AppLogic+Home) - 新浪网搜索引擎:
http://webpage.sina.com.cn/cgi-bin/webpage/webpage.cgi - 网易的邮件服务系统:
http://m220.163.com/cgi/ldapapp?funcid=main&sid=IAwBFvDOGlMAAegE - 美国的大型网站雅虎
- 美国的亚马逊网站
这些世界著名的机构和网络服务(包括微软的拳头产品hotmail),其安全性、稳定性要求是最高的,他们都是使用的CGI,随便在网上找,还可以找出大堆明显使用CGI的例子来。过去,微软曾经因为试图以其ASP取代CGI标准,故意宣扬CGI已经过时等错误观点,引起不少人误解,但是,微软经过实践发现这种想法是不现实的之后,又不得不删掉了这样的错误言论,并且给IIS加上了CGI的支持,事实上,微软已经以其实际行动证明CGI的优势。
CGI与ASP比较技术上如何?
我们可以从以下三个方面比较:性能,编程方法,设计方法。
有些人批评说,CGI需要产生一个新的进程处理用户请求,性能不佳。但是,在UNIX下FORK进程是非常高效的,传统的UNIX服务程序都是采用FORK进程的方式,FORK()所消耗CPU不会多于分析编译ASP网页的时间。况且CGI标准并未规定必须FORK新的进程,使用FAST CGI或MOD_PERL即可避免FORK新进程,其性能决不会亚于ASP。在一般硬件配置下,每秒进行数百次CGI访问是没有问题的。
编程方法上,CGI可以用程序员熟悉的任何语言开发,包括PERL,C/C++,PYTHON,JAVA,甚至Shell Script,可以使用DBFile,MySQL,ORACLE,SYBASE等数据库。而ASP则基本上是用微软的VBScript。没有哪个专业程序员会因为写VISUAL BASIC而感到特别自豪吧?
在设计方法上,ASP的思想是把程序嵌入在HTML文件中,把逻辑与表现方式混在一起,存在各种弊端。CGI的设计可以实现数据、逻辑和表现方式的分离,独立设计、改变三者。
由此可见,无论从哪个方面比较,除非您是微软的忠实门徒,ASP并非一个最佳选择。
根据NETCRAFT在2001年5月对全世界一千七百多万个网站的统计,目前使用UNIX的网站占百分之六十以上,并且在迅速增长,Windows和IIS占百分之二十左右。很多网站在经过IIS的痛苦之后,转换到UNIX服务器,为了适应这种情况,已有美国公司开发出能在UNIX和APACHE下运行ASP的商业软件,使原有的ASP网页在新环境下能够使用,但很显然,如果ASP用到了WINDOWS系统独有的功能,如COM、ActiveX、ADO等,是不可能移植到UNIX环境下的。
东方之晓的WEB软件大都是根据CGI标准用PERL5编写,并且与MOD_PERL兼容。这意味着我们的软件可以运行在任意操作系统和支持CGI标准的服务器下,而且可以在不同的平台之间转移。比如,如果您在IIS下运行神州建站通,一旦需要,可以很快的把整个系统和数据都移到LINUX下,继续正常运转。如果采用ASP的话,这样的转移是相当困难的。
为什么要CGI的更多相关文章
- CGI与FastCGI nginx+PHP-FPM
本文转载自CGI与FastCGI 1.当我们在谈到cgi的时候,我们在讨论什么 最早的Web服务器简单地响应浏览器发来的HTTP请求,并将存储在服务器上的HTML文件返回给浏览器,也就是静态html. ...
- CGI与FastCGI
当我们在谈到cgi的时候,我们在讨论什么 最早的Web服务器简单地响应浏览器发来的HTTP请求,并将存储在服务器上的HTML文件返回给浏览器,也就是静态html.事物总是不 断发展,网站也越来越复杂, ...
- CGI, FastCGI, WSGI, uWSGI, uwsgi简述
CGI 通用网关接口(Common Gateway Interface/CGI)是一种重要的互联网技术,可以让一个客户端,从网页浏览器向执行在网络服务器上的程序请求数据.CGI描述了服务器和请求处理程 ...
- Servlet和CGI的区别
Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销 ...
- fastcgi与cgi的区别
fastcgi与cgi的区别 先讲下cgi:cgi在2000年或更早的时候用得比较多, 以前web服务器一般只处理静态的请求,如果碰到一个动态请求怎么办呢?web服务器会根据这次请求的内容,然后会fo ...
- CGI与fastcgi与php-fpm与php-cgi的关系
cgi是一个协议,它规定了服务器Nginx会将那些数据传送给PHP-cgi fastcgi也可以说是一个协议.fastcgi是对cgi的性能的一次提高.fastcgi会先启动一个master,解析配置 ...
- CGI和ISAPI
1) CGI概念CGI即通用网关接口(Common Gateway Interface),它是一段程序,运行在服务器上,提供同客户端HTML页面的交互,通俗的讲CGI就象是一座桥,把网页和WEB服务器 ...
- CGI概念
CGI(通用网关接口,Common Gateway Interface) CGI是Web服务器与请求处理程序之间传输数据的一种标准,保证Web服务器传递过来的数据是标准格式的,其程序须运行在网络服务器 ...
- boa + ajax + cgi ajax请求cgi
最近公司要做一个通讯管理机,然后需要和另外一个同事一起做,我们需要用到boa+Ajax+CGI,以前没试过与CGI交互,一开始发现问题挺大的,用ajax请求cgi,总是不返回数据,又或者请求回来的是c ...
- Easyui datagrid加载本地Json数据,CGI数据
网上示例(记得引用Jquery): [html] view plaincopy var jsonstr = '{"total":1,"rows":[{" ...
随机推荐
- linux 下安装 nginx
安装nginx版本为1.7.5 一.下载nginx 官方地址:http://www.nginx.org/ 下载地址:http://nginx.org/download/ Nginx官网提供了三个类型的 ...
- QT模态弹出对话框
QDialog QWidget 默认show()都是非模态 如果需要模态显示, QDialog ==> setModal(true); show(); exec(); QWidget ==> ...
- 【POJ】【2975】Nim
博弈论 我哭……思路错误WA了6次?(好像还有手抖点错……) 本题是要求Nim游戏的第一步必胜策略有几种. 一开始我想:先全部异或起来得到ans,从每个比ans大的堆里取走ans个即可,答案如此累计… ...
- 【BZOJ】【1272】【BeiJingWC2008】Gate of Babylon
组合数学+容斥原理 Orz zyf-zyf 多重集组合数0.0还带个数限制? ——> <组合数学>第6章 6.2带重复的组合 组合数还要模P 0.0? ——> Lucas ...
- CKFinder 1.4.3 任意文件上传漏洞
CKFinder 是国外一款非常流行的所见即所得文字编辑器,其1.4.3 asp.net版本存在任意文件上传漏洞,攻击者可以利用该漏洞上传任意文件. CKFinder在上传文件的时候,强制将文件名(不 ...
- linq中查询列表的使用及iqueryable和list集合之间的转换
linq中查询列表的使用及iqueryable和list集合之间的转换 比如要查询一个货架集合,但是只需要其id和name即可,可以用以下方法:先写一个model类:CatalogModel(注意该类 ...
- 【redis】01Redis的介绍与安装部署
单元目标: 1.NoSQL介绍 2.Redis的介绍 3.Redis适用场合 4.Redis的安装与部署 5.Redis的数据类型 6.Redis的常用命令 7.Redis的高级应用 通过 ...
- 用supervisor控制celery时的脚本
注意启停的先后顺序及判断即可. 这样,在更改task之后,要重启就方便很多啦.. #!/bin/sh supervisord_count=`ps -elf | grep celery | grep - ...
- 李洪强iOS开发之零基础学习iOS开发【02-C语言】03-关键字、标识符、注释
上一讲中已经创建了第一个C语言程序,知道了C程序是由函数构成的,这讲继续学习C语言的一些基本语法.C语言属于一门高级语言,其实,所有的高级语言的基本语法组成部分都是一样的,只是表现形式不太一样.就好像 ...
- lintcode:三数之和
题目 三数之和 给出一个有n个整数的数组S,在S中找到三个整数a, b, c,找到所有使得a + b + c = 0的三元组. 样例 如S = {-1 0 1 2 -1 -4}, 你需要返回的三元组集 ...