在一个简单的http服务器中处理CGI请求

时间:2009-10-20 18:21:21

标签: c httpserver

我在C中编写一个基本的http服务器。处理一个简单的静态.html文件很简单,但我不知道如何处理动态.pl .cgi文件扩展名。

我知道我必须使用exec(),但我的问题是怎么回事?

3 个答案:

答案 0 :(得分:2)

看看CGI Spec。特别是第4节“调用脚本”和第6节“数据输入到CGI脚本”。您需要设置要读取的cgi脚本的环境变量(QUERY_STRING,SCRIPT_NAME等)。这个离开让你去。

答案 1 :(得分:2)

HTTP服务器的作用是实现HTTP协议(本质上是位于TCP / IP之上的通信协议)

支持.pl,.cgi等是Application Server的一个角色。有很多很好的例子。例如,在Ruby on Rails中,您可以使用Web服务器(Apache / nginx)并在其后面运行ruby解释器(实际上将使用嵌入的Ruby代码处理HTML)

你真的需要弄清楚你的目标是什么。

答案 2 :(得分:2)

是的,你应该给exec打电话。特别是,你可能想要运行一个shell,它将找出cgi程序是什么类型的脚本(例如perl,shell等)或二进制文件,并正确执行它。

通常的顺序是:使用管道创建一些管道,使用fork生成新进程,使用dup2将stdin和stdout连接到管道,以及exec(运行新程序)。

你可能会调用exec的execle变种。最后一个参数是cgi程序的一组环境变量。根据传入请求在cgi规范中设置名称值对。这些名称将包含REQUEST_METHODQUERY_STRING

接下来,将请求内容写入cgi的标准输入。例如,这将是POST的请求参数字符串。最后,阅读stdout并将其回显给浏览器。