自己写的web服务器如何调用CGI?
web前端不需要理会CGI
CGI居于web服务器端
CGI通过环境变量获取http请求,响应信息以及首部,通过stdin获取http主体,通过stdout输出http主体从而完成http动态页面的构建
引言
isapi与cgi都属于通用的网关接口,主要用来实现www服务器与客户端的信息交互。
随着www爆炸式的发展及其日益普及,人们的眼光已被充斥其上的商机所吸引。在www上求取经济利益的方式主要有以下几种:
通过为企业等作广告宣传收取广告费;
向入网观看者收取订阅费;
直接在网上出售商品和服务。
目前大多数网站提供信息的方式是由用户通过客户浏览器(如netscape或explorer等)与www服务器连接,然后用鼠标点按超连接以浏览相关主
页。在此过程中,基本上是服务器向客户端单方向的信息传递,随着服务需求的不断扩大,这种单纯的单方向传递信息的静态主页已不能满足需求。不论是服务提供
方还是客户,都希望浏览服务器将信息发送到用户同时,用户端也能将信息发送到服务器端,实现服务器与客户的交互。典型的应用如:用户登记表、用户留言板以
及用户通过www检索服务器端的数据库等。
要实现一个可与用户交互信息的服务系统,所需增加的有两项:交互式主页和用户输入信息处理程序。交互式主页即有输入信息的编辑框,选择菜单按钮之类
的主页,以供用户输入信息;用户输入的信息则交由用户信息处理程序处理。实现该程序可以有多种途径,该程序可以放在服务器端,也可以放在客户机端,前者如
cgi、isapi,后者如javaapplet等。本文只讨论前者,将阐述isapi的优点,并就其实现举例说明。
二、web交互环境的实现
21交互式主页
要实现web上的交互环境,用户必须能够在他浏览到的主页上输入信息,这就是一个交互式的主页。一般来说,用户输入信息的形式有填写编辑框,点选无线按钮等选择框及选择下拉菜单等,所以
此文来自: 马开东博客 转载请注明出处 网址: http://wwwmakaidongcom
交互主页也必须有这些输入元素项。下面是一个简单的交互主页例子:
交互式主页html源文件:isapi1htm
「html」
「title」test「/title」
「head」
isapitest
「/head」
「body」
「formaction="/gjy/isapi1/debug/isapi1dllregisteruser"method=post」
inputyourregisterinfomation:「br」
name:「inputtype="text"name="first"」「br」
address:「inputtype="text"name="middle"」「br」
email:「inputtype="text"name="last"」「br」「p」
「inputtype="submit"」
「inputtype="reset"」「/p」
「/form」
「/body」
「/html」
通过explorer浏览器打开该文件,可以看到如下效果(编辑框中已输入内容):
22实现交互主页的途径。
从上述主页制作描述可见,一个交互式主页的制作是很简单的,但要真正实现与用户的交互,还必须要有应用程序的参与。这个程序可以属于多种样式,如cgi、javaapplet以及isapi。在上述主页文件中,有一项:
「formaction="/gjy/isapi1/debug/isapi1dllregisteruser"method=post」
这里就指明了对应处理该主页输入信息的程序(isapi1dll),这是isapi的应用程序动态连接库。对于cgi应用程序也是一样的处理。
一般来说,该程序的功能就是要将用户输入信息传到服务器应用程序。
cgi是大家都比较熟悉的一种实现上述功能的有效途径,也可能是当前最为流行的一种,而isapi是微软独特的具有类似cgi功能的网络应用接口标准。isapi在性能上较之cgi具有许多优良特性。下面我们简单介绍一下cgi与isapi以及它们之间的性能差别。
三、cgi原理及其性能
31cgi概念
cgi即通用网关接口(commongatewayinterface),它是一个www服务器
主机对外服务的标准接口,一般来说,一个cgi接口的功能就是在超文本文件和服务器主机应用程序间传递信息。
32cgi程序语言
事实上,任何一种程序语言,只要能在服务器主机上利用cgi接口来编写应用程序,都可以叫作cgi程序语言。目前最为流行的cgi程序语言有四种:c,shell,perl和visualbasic,其它一些语言也有许多人在用,如tcl,fortran及applescript等。
33cgi程序的执行
cgi程序一般是个可执行程序。编译好的cgi程序一般要集中放在一个目录下。具体存放的位置随操作系统的不同而不同,例如unix系统下是放在cgi-bin子目录下,而在windows操作系统下
(注意,这里不包括nt40)以webstar或website作www服务器,cgi程序都放在cgi-win下。cgi程序的执行一般有两种调用方
式:1是通过url直接调用,如:“http://2021142182/cgi-win/cgiexe”,在浏览器的url栏里直接写入上述描
述就可以调用该程
此文来自: 马开东博客 转载请注明出处 网址: http://wwwmakaidongcom
序;另一种方式,也是主要的方式,是通过交互式主页里的form栏调用,通常都是用户在填完一张输入信息主页后按确认按钮启动cgi程序,前面的交互主页就是一个如此调用cgi的典型例子。
34cgi工作的主要流程
cgi工作的主要流程是:1一个用户请求激活一个cgi应用程序;2cgi应用程序将交互主页里用户输入信息提取出来;3将用户输入的信息传给服务器主机应用程序(如数据库查询〕;4将服务器处理结果通过html文件返回给用户;5cgi进程结束。
35cgi的性能评价
cgi的跨平台性能极佳,几乎可以在任何操作系统上实现,如dos、windows、unix、os/2、macintosh等。实现cgi的编程语言也有很多选择。cgi的应用程序一般都是一个独立的可执行程序,和www服务器各自占据着不同的进程,而且一般一个cgi程序只能处理一个用户请求。这样,每有一个用户请求,都会激活一个cgi进程,当用户请求数量非常多时,会大量挤占系统的资源如内存,cpu时间等,造成效能低下。
四、isapi原理及其性能
41isapi概念
isapi即internetserverapplicationprograminterface,是微软提供的一套面向internet服务的api接口,它能实现cgi能提供的全部功能,并在此基础上进行了扩展,如提供了过滤器应用程序接口。
42isapi程序语言
由于开发isapi应用要用到微软的一套api,所以能用来开发isapi应用的语言不如cgi那么多。主要有visualc++41以上版本,visualbasic50、borlandc++50也可以。
43isapi原理
isapi的工作原理和cgi大体上是相同的,都是通过交互式主页取得用户输入信息,然后交服务器后台处理。但是二者在实现机制上大相庭径。isapi与cgi最大的区别在于:不同于cgi,在isapi下建立的应用程序是以动态连接库的形式存在;而cgi的应用程序一般都是可执行程序。
44isapi程序的执行
isapi应用的工作流程与cgi有一些不同。isapi应用的dll不仅可以象cgi程序一样被用户请求激活,还可以被系统预先激活来监视用户输
入;对于被用户激活的dll,在处理完一个用户请求后不会马上消失,而是继续驻留在内存中等待处理别的用户输入,直到过了一段时间后一直没有用户输入。
45isapi性能评价
一个isapi的dll,可以在被用户请求激活后长驻内存,等待用户的另一个请求,还可以在一个dll里设置多个用户请求处理函数,此外,isapi的dll应用程序和www服务器处于同一个进程中,效率要显著高于cgi。
不过isapi的平台兼容性较差,目前只能用于微软自己的windows95和nt操作系统上,服务器平台也仅限于iis(internetinformationserver)和mspersonalwebserver以及ntworkstation上的peerwebserver。
五、isapi的实现
能够支持isapi开发的平台只有微软的几个平台组合(如nt+iis,win95+mspersonalwebserver)。因此开发isapi只能
这几个平台上。开发语言前已有述,这里向大家推荐visualc++42版,它的wizard提供了专门制作isapi的功能项。
其实SSI跟asp差别蛮大的,ssi只能是在shtml文件载入的时候,其中的ss标签被替换为其他内容,(何种标签替换为何种内容 是用户在LwIP协议中自定义的),而ASP、CGi是可以在html载入后动态调用的,他们才能实现完善的动态交互功能
至于如何入手,lwip的源码里面有详尽的英文注释,lz可以对着看看。
如果你想进行lwip 的CGI编程,建议你看看这么几个文件:httpdh httpdc httpd_cgi_ssic
我刚好是先学习了普通的PC机上搭建 IIS 服务器,学习html 、cgi、asp方面的知识,然后才接触lwip,然后在别人搭建好的嵌入式服务器上进行cgi编程,基本上手了。
硬件上的cgi编程更底层,而复杂,如果你难以入手,你可以在你的windows下搭建IIS服务器,熟悉一下cgi,再转stm32上实现
什么是CGI
CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。
CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。如php,perl,tcl等
什么是FastCGI
FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去太阳城fork一次(这是CGI最为 人诟病的fork-and-execute 模式)。它还支持分布式的运算, 即 FastCGI 程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。
FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。众所周知,太阳城CGI解释 器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性、Fail- Over特性等等。
FastCGI与CGI特点
1、如CGI,FastCGI也具有语言无关性
2、如CGI, FastCGI在进程中的应用程序,独立于核心web服务器运行,提供了一个比API更安全的环境。(APIs把应用程序的代码与核心的web服务器链接 在一起,这意味着在一个错误的API的应用程序可能会损坏其他应用程序或核心服务器; 恶意的太阳城API的应用程序代码甚至可以窃取另一个应用程序或核心服务器的密钥。)
3、FastCGI技术目前支持语言有:C/C++、Java、Perl、Tcl、Python、SmallTalk、Ruby等。相关模块在Apache, ISS, Lighttpd等流行的服务器上也是可用的。
4、如CGI,FastCGI的不依赖于任何Web服务器的内部架构,因此即使服务器技术的变化, FastCGI依然稳定不变。
FastCGI的工作原理
1、Web Server启动时载入FastCGI进程管理器(IIS ISAPI或Apache Module)
2、FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可见多个php-cgi)并等待来自Web Server的连接。
3、当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将太阳城CGI环境变量和标准输入发送到FastCGI子进程php-cgi。
4、FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。 在CGI模式中,php-cgi在此便退出了。
在上述情况中,你可以想象CGI通常有多慢。每一个Web请求PHP都必须重新解析phpini、重新载入全部扩展并重初始化太阳城全部数据结构。使用 FastCGI,所有这些都只在进程启动时发生一次。一个额外的好处是,持续数据库连接(Persistent database connection)可以工作。
FastCGI的不足
因为是多进程,所以比CGI多线程消耗更多的服务器内存,PHP-CGI解释器每进程消耗7至25兆内存,将这个数字乘以50或100就是很大的内存数。
Nginx 0846+PHP 5214(FastCGI)服务器在3万并发连接下,开启的10个Nginx进程消耗150M内存(15M10=150M),开启的64个php- cgi进程消耗1280M内存(20M64=1280M),http://tyangcdhcom加上系统自身消耗的内存,总共消耗不到2GB内存。如果服务器内存较小,完全可以只开启25 个php-cgi进程,这样php-cgi消耗的总内存数才500M。
cmd下的php命令只要你配置好系统变量就能够直接调用。
phpcgi是针对php本身的,web服务器则是能够调用phpcgi对php代码进行解析。比如IIS配置了FastCGI之后就可以支持PHP脚本;Apache配置文件写入相应的php文件路径之后,apache也可以支持php脚本。
1、三者的关系我们可以不规范的这样排列:C语言-CGI-ASP C语言是编程程序,可以编写任何的程序,其中包含CGI程序。 而CGI跟ASP是一样的功能,差别在CGI的功能更强大,有针对性,但是不容易设计与维护,而ASP除了改变CGI的不足之外,还增强了功能,而且这两种跟HTML等技术结合比较紧密,当然,ASP是他们之间最适合、方便跟HTML等技术结合的语言了。
2、CGI
CGI是公共网关接口的英文缩写,是一个在Web服务器和CGI程序之间传递信息的规范。CGI程序是为接收和返回符合CGI规范的数据设计的。这种程序可以用任意编程语言编写,如C、Perl、Java或Visual Basic。 CGI程序是Web服务器同用户动态交互作用的最普遍方式。例如,许多含有表格的HTML页面用CGI程序处理表格数据。另一种为Web用户提供动态反馈的越来越常见的方式是包含在用户机器上运行而不是在Web服务器上运行的脚本或程序。这些程序可以是Java小应用程序、Java脚本或ActiveX控件。这些技术统称客户端解决方法,而CGI是服务器端解决方法,因为处理过程是在Web服务器上进行的。 CGI存在一个问题,即每执行一次CGI脚本就要启动一个新过程。对于繁忙的Web网站,这可能明显降低服务器速度。一个更有效但也更难实现的解决方法是用服务器API,如ISAPI或NSAPI。还有一个日益流行的解决方法是用Java小服务程序。
3、asp活动服务器页面
活动服务器页面(Active Server Pages)是一个用ActiveX脚本——通常是VB脚本或JScript代码——动态创建带ASP扩展名的Web页面的规范。当浏览器请求ASP页面时,Web服务器就用HTML代码生成页面并发送给浏览器。ASP页面类似CGI脚本,但它能让Visual Basic程序员使用熟悉的工具。
cgi文件是什么?cgi文件格式介绍如下:cgi格式文件是“公共网关接口脚本”类型文件,可理解是一个可执行的脚本。可以使用Python、Perl、Ruby等语言进行创建。cgi脚本通常用于运行基本的Web脚本,比如在Web窗口中发送电子邮件等。cgi文件怎么打开?cgi格式文件它是一种常见的代码文件,正如您所了解的代码文件都是文本格式的,这意味着打开cgi格式文件的方法有很多。无论您使用的是Windows、MacOSX、Linux,都可使使用系统里面都自带的文本编辑器来打开及编辑cgi文件,您所需要做的只是双击它即可。改文件属性需在服务器上改,不过NT和LINUX/UNIX下是有区别的。NT文件属性值不用更改,IMAGE文件也可以放到CGI-BIN目录内LINUX/UNIX是要改属性的,IMAGE方面的文件不能放到CGI-BIN目录内,必须在CGI-BIN目录外另建目录,否则无法显示。cgi格式图标如下:cgi文件是什么以及cgi文件怎么打开详情如下:CGI文件摘要我们有六个与CGI文件相关的已知软件程序(通常是由MicrosoftCorporation开发的称为MicrosoftNotepad的软件),它们可以归类为二种主要文件类型。通常,这些文件被视为CommonGatewayInterfaceScript格式。在大多数情况下,这些文件被视为ExecutableFiles,但它们也可以是DeveloperFiles。
桌面(和某些移动)设备上已支持文件扩展名为CGI的文件。Windows、Mac和Linux完全或部分支持这些文件。CGI文件扩展名的普及性为“低”,这意味着这些文件在大多数用户的文件存储中都不常见。
如果您想了解有关CGI文件和打开它们的软件的更多信息,请参阅下面的其他详细信息。此外,如果您在打开CGI文件时遇到问题,可以学习如何对其进行基本故障排除。
CGI文件的种类2种已知文件类型使用此扩展名CommonGatewayInterfaceScriptRADStudioConfigurationFile校长CGI类型CGI文件名:cgi分类:CommonGatewayInterfaceScriptACGI文件是由网络服务器执行以创建动态网页通用网关接口(CGI)脚本。它通常存储在“CGI-BIN”文件夹中的Web服务器上的网站目录内,如果他们不预编译只能进行编辑。
文章作者:UnknownDeveloper组:可执行文件文件夹:HKEY_CLASSES_ROOTcgi打开CommonGatewayInterfaceScript的软件程序:
MicrosoftCorporation开发的MicrosoftNotepad(软件环境:Windows)(软件环境:Mac)LinuxMacroMates开发的MacroMatesTextMate(软件环境:Mac)OpenSource开发的gVim(软件环境:Windows)RichardsonSoftware开发的RichardsonEditRocket(软件环境:Windows)(软件环境:Mac)LinuxBareBonesSoftware开发的BBEdit(软件环境:Mac)其他CGI文件关联CGI文件名:cgi分类:RADStudioConfigurationFileACGI文件也可能与所谓的RADStudio中的应用程序开发工具相关的文件。它包含了RADStudio配置。
文章作者:EmbarcaderoTechnologies组:开发者文件打开RADStudioConfigurationFile文件的软件程序:
EmbarcaderoTechnologies开发的RADStudio
兼容:(软件环境:Windows)MaciOSAndroidLinuxCGI文件并发症典型的CGI开放挑战MicrosoftNotepad不在尝试打开CGI时,你会遇到一条错误消息,例如“%%os%%无法打开CGI文件”。通常,%%os%%中会出现这种情况,因为MicrosoftNotepad未安装在你的电脑上。您的操作系统无法将CGI与MicrosoftNotepad关联,因此双击该文件将无法正常工作。
提示:如果您没有安装MicrosoftNotepad,并且知道有其他程序可以打开CGI文件,则可以尝试通过从“显示应用程序”下列出的程序中进行选择来打开它。
过时的MicrosoftNotepad有时,你可能安装了与CommonGatewayInterfaceScript类型不兼容的过时版本的MicrosoftNotepad。如果您没有正确的版本,则需要下载更新版本的MicrosoftNotepad。此问题主要发生在您的CommonGatewayInterfaceScript文件是由比电脑上的更新版本的MicrosoftNotepad创建的时候。
提示:通过右键单击并选择“属性”来调查CGI文件,以查找有关所需版本的线索。
摘要:在任何一种情况下,难以打开CGI文件的大多数问题都与您的计算机上没有安装正确的软件应用程序有关。
打开CGI的问题的更多原因即使在计算机上安装了最新的MicrosoftNotepad软件,打开CommonGatewayInterfaceScript文件时仍可能出错。如果你在加载CGI文件时继续出错,其他外部问题可能会归咎于其他外部问题。这些问题包括:
Windows注册表CGI文件路径不正确错误地删除Windows注册表CGI说明MicrosoftNotepad或其他CGI应用程序遇到了有缺陷的安装您的CGI文件已损坏(您的CommonGatewayInterfaceScript文件本身存在问题)恶意软件破坏了CGI文件的完整性与CGI相关的硬件有设备驱动程序损坏系统资源不足以成功打开CommonGatewayInterfaceScript文件cgi文件是什么以及cgi文件怎么打开扩展阅读CGI文件扩展名文件类型公共网关接口脚本开发者N/A常用度日常使用格式文件后缀cgi文件分类可执行文件CGI是什么文件?CGI文件是由Web服务器执行的动态页面的公共网关接口(CGI)脚本,可理解是一个可执行的脚本,它通常由Perl或C语言编写的。CGI脚本通常用于运行基本的Web脚本,例如在Web表单发送电子邮件等。
CGI文件扩展信息公共网关接口(CommonGatewayInterface,CGI)是Web服务器运行时外部程序的规范,按CGI编写的程序可以扩展服务器功能。CGI应用程序能与浏览器进行交互,还可通过数据API与数据库服务器等外部数据源进行通信,从数据库服务器中获取数据,格式化为HTML文档后,发送给浏览器,也可以将从浏览器获得的数据放到数据库中。
几乎所有服务器都支持CGI,可用任何语言编写CGI,包括流行的C、C++、Java、VB和Delphi等。
CGI脚本通常存储在Web服务器上网站目录内的“cgi-bin”文件夹中,并且只有在未预先编译的情况下才能对其进行编辑。
CGI脚本用途CGI脚本常见的用途:
根据浏览者填写的HTML表单发送定制的答复;创建可单击的图像缩小图;创建一个浏览者可以搜索内容的数据库;提供服务器与数据库的接口,并把结果转换成HTML文档;制作动态HTML文挡。MIME类型magnus-internal/cgi
警告不完善的CGI应用程序可能成为别人非法进人服务器系统的通道,有可能导致重要的资料被删除或外泄。
CGI文件怎么打开?如果你电脑上打不开CGI文件,原因可能有很多,而最常见最主要的原因就是你的电脑没有安装可以打开CGI文件的软件;Windows系统会弹出提示框:“若要打开此文件,Windows需要知道哪个程序打开它”,最简单直接的解决办法就是下载并安装合适的软件来打开CGI文件。
可以打开CGI文件的软件程序
0条评论