Tinyhttpd 源码剖析(基于linux ubuntu)

一、前言

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程序。</

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值