Tiny HTTPd 开源web服务器搭建过程及简要分析

开源web服务器,Tiny HTTPd,纯c编写,作者:   jdavidb。服务器小巧,轻便,结构简单,将搭建web服务器的原理阐述的很清楚,对学习很有帮助。下载地址


测试环境:Ubuntu 14.04.2

由于服务器不是默认为linux开发的,所以需要经过简单的修改才能在linux上运行起来。

1、修改Makefile文件,将gcc -W -Wall -lsocket -lpthread -o httpd httpd.c

修改为:gcc -W -Wall  -o httpd httpd.c -lpthread。(删除-lsocket,linux下不需要 -lsocket。将-lphtread放到最后,在网上查找得到的结果是-lphtread不能放在 -o 前面,具体原因目前未知)

其实在源代码httpd.c里面,介绍了在linux系统上编译时,需要修改的地方,(还是要仔细阅读源代码)。

2、htdocs文件夹下,有两个cgi脚本文件,用于此服务器的响应,用perl语言编写,由于机器默认perl安装位置不同,所以需要修改为本机的perl地址。

经过两处修改,make 后, 服务器即可成功搭建起来。


服务器有三种交互方式:

1、直接输入ip:port地址,服务器打开存在htdocs文件夹下的index.html文件,在输入框内输入一种颜色,如red或0 0 0 ,index.html调用color.cgi脚本,显示该颜色。

2、可直接访问htdocs文件夹下脚本,如ip:port/color.cgi,默认为蓝色,或另一个脚本文件ip:port/check.cgi。

3、可直接访问htdocs文件夹下文件,如ip:port/README,将打印该文件。


总结:

1、name.sin_port = htons(*port)

此处若*port为0,则系统会随机分配端口号

2、name.sin_addr.s_addr = htonl(INADDR_ANY);

INADDR_ANY:此处表示任意IP地址,若服务器有多块网卡,多个IP地址,通过几个IP地址+端口均可访问服务器

3、newline 即 linefeed: 换行符  LF \n 换到下一行的当前列

carriage return 回车符 CR \r 回到当前行的起始位置

4、strcasecmp忽略大小写比较字符串是否相等,isspace判断字符是否为空字符,为空则返回true


你可能感兴趣的:(Tiny HTTPd 开源web服务器搭建过程及简要分析)