tiny httpd源码分析:1.前言与环境准备

474 阅读2分钟

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/,看到如下页面说明服务器运行正常:

服务器主页面.png 在输入框输入red,显示如下页面说明CGI程序正常执行:

color.cgi页面.png

Tips:

  1. 以上操作所使用的源码是我修改过的,可以直接在Linux系统上运行。如果你使用的是原版代码,需要根据作者注释修改代码
  2. 使用原版代码还需要注意一下两点:
    • 检查cgi文件是否有执行权限,如果没有,要为其设置执行权限
    • cgi文件头部的#!/usr/local/bin/perl -Tw需要修改为#!/usr/bin/perl -Tw