一个参考自tiny-httpd、使用了libev、http-parser、hashmap、log.c等第三方库进行了功能增强的CGI Web Server。它可以帮助你大致地了解Web Server的工作原理。
- HTTP请求的解析与封装
- GET、POST请求处理
- 支持CGI协议
- 日志输出
1.安装libev、Python3
sudo apt install -y libev-dev python3
2.将项目代码拉取到本地
git clone https://github.com/uncle-lv/cgi-http-server.git
3.进入src
目录,使用make
命令构建项目
make
4、运行服务器(端口号是可选参数)
./server {port}
与tiny-httpd类似,cgi http server也提供了
/index.html
、/login.html
等几个url路由供使用者测试。CGI脚本需要有执行权限。
src
├── hashmap.c
├── hashmap.h
├── http_parser.c
├── http_parser.h
├── http_request.c
├── http_request.h
├── log.c
├── log.h
├── Makefile
├── server
└── server.c
阅读源码请重点阅读http_request.*和server.c,其余文件皆为第三方库。
hashmap:一个C语言实现的hashmap。
http_parser:C语言实现http请求/响应解析库。
log.c:C99实现的一个简单日志库。
期待来自你的issue或pull request。
也许会在后续计划中实现完整的HTTP/1.0与CGI/1.1协议。