基于windows IIS的C语言CGI WEB服务器环境搭建
网页编程对我来说特别亲切,因为我就是从html、ASP、PHP一步步接触编程的。自己的编程爱好也是从那里一点一点被满足。不过离开大学之后很久没有碰过WEB了,最近看到嵌入式中的涉及到的web服务器,了解到了CGI编程,就想赶紧试一试。对于cgi,不算接触,但是还是听说过之前,对于纯粹写普通网站的人来说CGI却是很古老的东西了,之前在大学的时候学校的ftp搜索引擎,是一位特别牛b的学长写的,用的就是C实现CGI。后来我也想做一个,但是由于水平有限,后来也就不了了之。前几天在南图想找本关于CGI方面的书竟然都下架了,在网上搜索关于这方面的文章页很少,且很多是针对perl语言的,所以这里针对C语言的CGI写点东西。
嵌入式中的WEB服务器,由于嵌入式中主要是用C语言来实现,所以这里只谈C语言的CGI,而在嵌入式中的WEB服务器,大家一般选用BOA等,这里为什么选用IIS,主要是因为我们大部分人都是在windows下开发,所以在iis下调试自然是更方便一些。在网上看到很多人在问iis下配置关于C语言的CGI的方法,而网上的全部都是关于Perl的。我经过了两天的时间在网上一遍一遍的百度和摸索,终于试出来基于windows xp的IIS5.1和windows 7的IIS6.1上的CGI配置方法。
综述: 关于脚本和可执行程序
在iis中对于动态语言会设计到脚本和可执行程序。对于脚本是需要另外的程序对其进行解释的,例如perl脚本编写的CGI就是脚本,需要安装专门的程序区解释;而对于可执行程序,例如C语言编写的.cgi(是c语言编译出来的.exe程序,将扩展名exe改成cgi),其本身就是可执行程序,不需要另外的程序去解释,所以网上关于使用TC还是VC的编译器cl.exe作为可执行程序去配置c语言编写出来的cgi的说法都是错误的。其实CGI的实现就是将本身脚本或者可执行程序的标准输出,不再是通过屏幕打印,而是经过浏览器输出给客户端显示,所以你用一个vc或者tc的编译器去执行一个.exe的可执行文件是得不到想要的输出的。正确的作法是不需要和perl语言一样配置解释程序,而是配置为让文件执行。
具体操作:
由于网上针对IIS 和C语言的CGI的内容较少,所以下面的内容一步步用图片说明。方便向我一样的初次使用者。
1.编写CGI程序。
使用任何一种C语言开发工具,TC,VC,C-free均可,C/C++均可。内容我们还是使用经典的hello world。
- /**************************** hello.cpp
- 使用C++实现的CGI输出hello world!
- by kikilizhm
- *****************************/
- #include <iostream.h>
- void main()
- {
- cout<<"Content-type:text/html\n\n"<<endl; /* 注意这里一定要按照这种格式,表示http头以供浏览器识别,后面的\n\n是http中要求的头和后面的内容必须空一格, 而且必须使用反斜杠,不能使用" /n/n " ,这样会报错的,无法识别。 */
- cout<<"Hello World!"<<endl;
- }
- /********************************hello.c***************
- 使用C语言实现的CGI输出加粗的hello world!
- by kikilizhm
- ******************************************************/
- #include <stdio.h>
- int main()
- {
- printf("Content-type:text/html");
- printf("\n\n");
- printf("<b>Hello World!</b>");
- }
上面分别是使用C++和C语言编写的hello world 例程,根据个人习惯,然后编译生成 hello.exe 可执行文件,将扩展名exe改为cgi,变为hello.cgi。
现在我们的cgi程序就写好了,下面我们开始配置iis,看看效果。
2.针对windows xp 的IIS5.1的配置。其实配置很简单,只要大家看明白其中的根本。
说明:这里默认IIS已经安装好可用(具体安装IIS的方法可以百度一下,这里不细说),针对iis5.1我们需要的只是配置一下脚本和可执行文件的执行权限即可。
按照上面说的,exe文件不需要解释程序,直接执行即可。假设我们网站根目录是www,下www\cgi目录为脚本存放目录,我们把hello.cgi文件放到cgi目录下,这里为演示方便,正常情况下考虑安全等因素,常将存放脚本的目录使用虚拟目录挂接,不直接放在网站根目录下。
然后我们在IIS中右击cgi目录,选择属性,打开cgi属性对话框,在目录选项卡设置读取、写入、目录访问前的勾去掉。其中读取是防止在访问cgi程序时,浏览器将cgi文件作为下载文件弹出下载对话框,而不是实际执行显示在浏览器上。写入和目录访问时安全需要。这里特别注意去掉读取权限。
然后将下方的 ”执行权限“更改为 ”脚本和可执行文件“ ,这里也是重要的一步,不可以用纯脚本,一定要有可执行文件权限。点击确认再确认,重启IIS即可。
走到这里我们打开浏览器,输入 http://localhost/cgi/hello.cgi ,即可看到hello world的画面,如果还看不到或者出现其他提示错误,一般为网站的访问权限认证设置有问题,可以尝试修改文件夹访问权限。
**************************** ==针对win 7 的IIS6.1的配置== *****************************
3.win7中的IIS界面和windows xp 中的IIS5.1界面发生了很大的变化,IIS 6.1中已经内置有CGI处理模块,这里我们直接使用即可。
同样这里我们假设我们IIS6.1已经安装好,而且可以使用,新建网站名称:cgi-test,根目录为www,下面有子目录cgi用于存放cgi脚本文件。
在左侧的cgi-test网站中,我们单击cgi-test网站的cgi目录,右侧会显示cgi主页,我们在右侧 IIS 部分双击模块,进入模块功能,可以看到CgiModule模块,我们接下来就是要使用的这个模块来实现我们的cgi功能。
看到这里,我们返回cgi目录的主页,双击CGI主页中的”处理程序映射“来配置 cgi文件的映射,在处理程序映射界面,每一条配置的路径相当于配置的文件扩展名,
状态为已启用或者禁用,处理程序即相应的模块或者脚本解释程序。 在最右侧的操作界面,我们可以看到我们可以选择的操作,其中包括 添加托管处理程序、添加脚本映射、添加通配符脚本映射,添加模块映射,和下面的编辑功能权限等。这里我们使用的是添加模块映射和编辑功能权限。
单击添加模块映射,在出现的编译模块映射对话框中,按照如图所示配置,请求路径输入 *.cgi ,表示cgi格式文件,模块选择CgiModule,可执行文件为空,名称可以随便写,这里为cgi-exe。确定后,增加了cgi-exe配置,然后右击这条配置选择编译功能权限,确保有执行权限,然后重启iis服务。在浏览器中输入地址,即可查看到hello world的打印。
看看我们的成果吧,这里只是打印了最简单的字符,服务器已经配置好了,大家可以发挥自己的聪明才智,实现自己的功能吧~
总结:
经过大概两天的时间,终于摸索出了在iis上配置C语言编写的CGI的方法,其实真正配置下来,花的时间并不多也不复杂,但是由于网上很少人使用iis做C的cgi的服务器,而且网上关于这类问题的回答都是答非所问,甚至是错误的说法,所以摸索起来很困难,但是这两天的时间里,在经历了从最初的没有头绪,到最后的思考网上很多人在说的perl语言的cgi和c语言的cgi的区别,去甄别那些错误的信息,并且从那些错误的信息里找出来对我又帮助的地方,比如刚开始的时候使用vc的编译器cl.exe去执行,并没有得到想要的结果,于是去尝试vc的bin目录下的其他程序,在有的程序返回了一部分字符的时候,在浏览器的错误信息里显示了错误的http头,比之前的空的头还是有点帮助,毕竟有了显示,虽然是个错误信息。然后尝试着用cmd.exe去执行,最后的最后确信不适用程序去执行,后面会出现访问cgi的时候出现下载的问题,用文本方式打开下载的文件,虽然也是和服务器端一样的名称,但是下载的文件内容已经是个文本,里面就是执行打印出来的信息,只是它被下载下来了,而不是在浏览器中显示,后来在网上看到了一个朋友发的msdn社区上的说明,需要去掉读取权限,这才恍然大悟。然后就看到了亲切的打印信息了。
即使一个一开始不明白或者没有涉及到的问题,不断的去想解决它,即使没有进展,但是对于你对问题的理解还是有很大帮助的,我想这和那种做梦发现苯环之类的是一样的道理。同时也是一种学习的方式,对于一种技术一下子接受不了的时候,可以先看一部分,了解一下,或者强迫自己先学,然后放置一段时间,再回头在学,就会发现很轻松了。
该睡觉了,希望这里能对大家起到帮助作用,另外,在使用的过程中,推荐大家使用合适的环境,比如在apache中配置cgi更加的简单和安全。针对IIS上的C语言的CGI主要是针对大家在调试过程中使用。
出处:http://blog.csdn.net/kikilizhm/article/details/7840719
基于windows IIS的C语言CGI WEB服务器环境搭建的更多相关文章
- CentOS下Web服务器环境搭建LNMP一键安装包
CentOS下Web服务器环境搭建LNMP一键安装包 时间:2014-09-04 00:50来源:osyunwei.com 作者:osyunwei.com 举报 点击:3797次 最新版本:lnmp- ...
- web服务器环境搭建(及请求代理)
集成开发环境:(前端开发还是使用下面单独的web服务器比较好,前后端分离会用到代理的功能) 1.安装xampp时,软件会自动安装 微软的 Microsoft Visual C++ 2008 Redi ...
- Linux下Web服务器环境搭建LNMP一键安装包[20130911更新]
2012年08月14日 ⁄ LNMP ⁄ 评论数 73 ⁄ 被围观 25,200次+ 最新版本:lnmp-2.4 安装说明:请保证服务器能够正常上网.服务器系统时间准确.yum命令可以正常使用! 1. ...
- Unable to connect to web server 'IIS Express'(无法连接到Web服务器“IIS Express”)的解决方式-Jexus Manager
在运行微软示例工程eShopOnWeb时候, 在经过一段时间再运行启动报Error "Unable to connect to web server 'IIS Express'" ...
- Windows Server 2003 IIS6.0+PHP5(FastCGI)+MySQL5环境搭建教程
准备篇 一.环境说明: 操作系统:Windows Server 2003 SP2 32位 PHP版本:php 5.3.14(我用的php 5.3.10安装版) MySQL版本:MySQL5.5.25 ...
- 《Node.js入门》CentOS 6.5下Node.js Web开发环境搭建笔记
近期想尝试一下英特尔的基于WebRTC协同通信开发套件,所以须要在本地搭建Node.js Web的开发測试环境. 这里讲的是CentOS 下的搭建方法.使用Windows的小伙伴请參考: <No ...
- 搭建web服务器环境
一. 安装apache 安装好之后测试:浏览器地址栏输入:localhost,若弹出"It works!"表明已成功安装. 管理方式:1.通过Apache自带的镜像管理器:2.wi ...
- 基于Maven的Springboot+Mybatis+Druid+Swagger2+mybatis-generator框架环境搭建
基于Maven的Springboot+Mybatis+Druid+Swagger2+mybatis-generator框架环境搭建 前言 最近做回后台开发,重新抓起以前学过的SSM(Spring+Sp ...
- 基于Eclipse IDE的Ardupilot飞控源码阅读环境搭建
基于Eclipse IDE的Ardupilot飞控源码阅读环境搭建 作者:Awesome 日期:2017-10-21 需准备的软件工具 Ardupilot飞控源码 PX4 toolchain JAVA ...
随机推荐
- 50 Jquery 库
一.概念: 1.jquery 的选择器和ccs 相同 2.jquery对象, dom对象的集合,类似python中list,有自己的各种方法和属性 // [dom1,dom2,.....] 3.方便之 ...
- Greedy Subsequences CodeForces - 1132G
我们从右往左滑动区间, 假设dp[i]表示i为左端点时的最大长度, 通过观察可以发现, 每添加一个点, 该点$dp$值=它右侧第一个比它大位置处$dp$值+1, 但是每删除一个点会将所有以它为根的$d ...
- hdu 6395 Sequence (简单矩乘)
P/n大多数情况是不变的, 取值只有$O(\sqrt{P})$种, 可以用$p/(p/i)$跳过重复的值, 复杂度$O(logn\sqrt{P})$ 要注意 P跟模数P有冲突 要特判p/i==0和p/ ...
- Leetcode 78
//和77类似的问题,可以放在一起记忆class Solution { public: vector<vector<int>> subsets(vector<int> ...
- 牛客网——E求最值
链接:https://www.nowcoder.com/acm/contest/59/E来源:牛客网 题目描述 给你一个长为n的序列a 定义f(i,j)=(i-j)2+g(i,j)2 g是这样的一个函 ...
- 在EO中获取某字段基于表的列名
//生成EO的时候自动生成的字段 public static final int BRIEFINTRO = 88; String[][] str = null; str = new String[][ ...
- vue-cli的安装及使用
一. node 和npm 1.在安装vue-cli前,要确认自己的电脑是否安装了node和npm 2.查询版本如下(vue脚手架支持node@4.xx以上) node -v 查询node版 ...
- Android Studio NDK开发入门
从Android Studio 1.3 Beta1开始,就支持了NDK,我目前使用的版本是1.5.首先强调几点. 1.必须安装NDK并配置好环境变量(和配置JDK环境变量如出一辙:新建NDK_HOME ...
- 1011 A+B 和 C
给定区间 [-2^31, 2^31] 内的 3 个整数 A.B 和 C,请判断 A+B 是否大于 C. 输入格式: 输入第 1 行给出正整数 T (≤10),是测试用例的个数.随后给出 T 组测试用 ...
- Ubuntu下安装virtualbox失败解决方案
安装失败的截图: 因此使用常规方法:对依赖的两个包进行获取安装,依旧失败: 因此解决方法为在官网上下载相对应版本的virtualbox软件:下载地址为:https://www.virtualbox.o ...