一、前言
tinyhttpd是一个代码不到500行的超轻量型的Http Server,使用C语言开发,全部代码只有五百多行,可以通过这个这段代码理解一个Http Server的本质。
下载地址:http://sourceforge.net/projects/tinyhttpd/
按照作者在httpd.c文件中开头注释中的说法,这个是跑在Sparc Solaris 2.6上面,如果要跑在linux上面,还需要做以下修改:
1、注释掉 #include <pthread.h>
2、注释掉main函数中定义newthread的行
3、注释掉main函数中pthread_create那两行
4、在main函数中将accept_request()取消注释
5、将Makefile文件中,编译条件 -lsocket去掉
但是实际中按照上述方法测试,还是没能成功跑起来,所以我自己稍微修改了下,最终能在linux ubuntu跑起来,浏览器输入IP和端口即可查看效果。我喜欢将所需的知识点写在同一个博客中,所以部分知识点会在行文过程中直接体现。
接下来就开启剖析之旅,有问题欢迎指正!
二、目录结构
整个httpd代码文件量很少,包括README和html .cgi文件也才10个文件。
httpd.c:这个文件里面实现了WebServer服务器,所以这个文件也是整个工程的重点
simpleclient.c:这里面实现了一个普通的tcp client,没什么实际的功能
Makefile:可以直接make命令进行编译,当然linux下你可以直接输入gcc -o httpd httpd.c进行编译
index.html:这个是html文件,可以直接双击有浏览器看效果。当你服务器开启监听后,用浏览器输入服务器IP:端口后,首先收到的就是这个index.html页面。
color.cgi:这个是cgi程序,用Perl编写的,主要是接收服务器的输入,并产生一个输出发送给客户端。当你在测试页面输入颜色并点击submit后,浏览器会向服务器请求color.cgi文件,并将你输入的颜色作为参数传入color.cgi程序,然后产生一个输出到你的浏览器,你就可以看到颜色的效果了。
check.cgi:使用流程和color.cgi一致,具体功能没去深究,不过你可以将html文件里面的color.cgi换成check.cgi,然后查看效果
基础知识点:
CGI:通用网关接口(common gateway interface),描述了服务器和请求处理程序之间传输数据的一种标准。在这个httpd程序中,简单来,就是服务器收到浏览器请求cgi的请求,接下来服务器调用cgi程序,并将浏览器带过来的参数传入cgi程序执行。Perl是一个广泛被用来写CGI程序的语言,但实际上像Unix shellccript、Python、Rubby、PHP、TCL、C/C++、VB都可以用来编写CGI程序。</