1.1 前言
写这个系列博客的原因是我前一段时间想要阅读Nginx的源码,然后发现:
所以,还是从最简单的tiny httpd开始学习吧!
如果你只想大致地了解HTTP服务器的工作原理,那么这篇博客可能并不适合你。因为tiny httpd是使用C语言开发的,并且调用了很多Linux系统的API。所以,对于不熟悉C语言和Linux系统的初学者来说,上手难度会比较高。如果你符合这一情况,我推荐你阅读这篇博客。
1.2 前期准备
tiny httpd的默认代码是Solaris版的,但只要根据作者的注释稍加修改就能在Linux系统上运行了。我使用的Linux发行版本是Ubuntu 20.04.4 LTS,所以我接下来的所有操作都是在该系统下进行的。如果你使用的也是基于Debian的Linux发行版,那么这些操作大概率将是通用的。
安装git:
sudo apt install git
安装build-essential:
sudo apt install build-essential
安装Perl:
sudo apt install perl
安装libcgi-session-perl:
sudo apt install libcgi-session-perl
git:常用的版本管理工具,安装它是为了从github上面拉取tiny httpd的源码。
build-essential:提供了编译C/C++所需要的工具,包括gcc、g++、libc6-dev、make、dpkg-dev。
Perl:一种动态编程语言,tiny httpd的CGI程序是由Perl脚本编写的。
libcgi-session-perl:一个Perl库,提供了跨HTTP请求的会话管理。
1.3 编译源码
先将源码拉取到本地:
git clone https://github.com/uncle-lv/tiny-httpd.git
切换至源码所在的文件夹:
cd tiny-httpd
使用make进行编译:
make
编译过程中会产生几条警告信息,不用在意。毕竟tiny httpd是1999年编写的程序,那时的编译器检查没有如今的严格。
1.4 运行服务器
运行tiny httpd:
./httpd
显示如下信息表示服务器启动成功:
httpd running on port 4000
然后,打开浏览器输入:http://localhost:4000/,看到如下页面说明服务器运行正常:
在输入框输入
red,显示如下页面说明CGI程序正常执行:
Tips:
- 以上操作所使用的源码是我修改过的,可以直接在Linux系统上运行。如果你使用的是原版代码,需要根据作者注释修改代码
- 使用原版代码还需要注意一下两点:
- 检查cgi文件是否有执行权限,如果没有,要为其设置执行权限
- cgi文件头部的
#!/usr/local/bin/perl -Tw需要修改为#!/usr/bin/perl -Tw