EasyHttp 最简单的http服务器
说明:
这是一个C语言编写的http服务器简单实现,使用python语言作为cgi程序处理用户的表单输入。通过这个项目有利于理解http服务流程,以及多线程调试等诸多知识点。
使用方法:
- 平台:centos7 编译器:gcc 4.8.4
- 下载项目,修改htdocs目录下easycgi.py 的运行权限 chmod
- cd EasyHttp && make && ./httpd
- 可以通过修改 index.html 表格中的请求方式来测试get post方法
- 建议初学者通过逐步调试的方式学习代码,每个函数都有详细的注释哦~
流程:
- 代理发送过来请求,服务器建立client_sock套接字,创建进程处理请求 accept_request
- 逐行从套接字中读取http请求报文,判断请求类型 GET POST 判断 url 根据url上的参数读取服务器上的文件或者准备执行cgi文件
- 根据具体的方法 将参数存储到 meth_env (putenv)中
- 创建子进程执行cgi程序,父进程通过管道向子进程传入数据,从管道读取子进程输出的数据 父子进程通信示意图如下
- 该服务器采用python编写cgi程序
注意:
- strlen 与 sizeof的区别 如果send中使用 sizeof 很有可能由于缓冲区被占满导致 send 被阻塞
- 用户的代理(浏览器)会检查http的响应报文格式,所以http服务器返回的报文一定要严格按照要求编写
项目地址:https://github.com/hunterzhao/EasyHttp 如果对您有帮助请给我点star哦 :)
测试:
- 浏览器第一次请求到页面
- 浏览器提交用户的输入,并返回执行结果
参考:
- http 请求报文 与 响应报文
- GDB 调试多进程方法
- python cgi编写方法
版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/hunterzhaominng/article/details/51136366
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
-
发表于 2020-03-07 05:10:05
- 阅读 ( 1168 )
- 分类: