这个项目是基于HTTP/1.0版本的一个简单web服务器,主要用于练习网络编程和系统编程。
使用技术:
项目使用c++编写、cgi技术、多线程、 多进程(处理cgi)、socket网络编程
版本1采用线程池加任务队列的方式处理请求
版本2采用Reactor的设计模式,通过epoll + 线程池 + 就绪队列 + 事件池的方式编写,解决了版本1中处理cgi时工作线程阻塞等待问题。
项目源码: https://github.com/Waorange/http-server
注:该项目参考Tinyhttpd 另外没有进行详细的测试,如果有bug希望指出,还有我也时刚接触网络编程这块,如果在设计上有什么不合理的地方或者文中名词使用有什么问题也希望各位大佬们可以指出。
HTTP处理过程
HTTP定义了不同的客户端和服务器交互方式,每种方法有不同的协议格式,通过某种方法向服务器发送请求,服务器收到请求,根据不同的方法进行处理,处理完后返回HTTP响应。
请求报文和响应报文格式
请求方法
项目支持的方法GET POST
首先说明两个概念
URI统一资源标识符,用来唯一的标识一个资源
URL是统一资源定位符,用于描述一个网络上的资源。
cgi是外部应用程序与服务器的接口标准,客户端通过请求服务器和其他程序进行交互,这个过程对客户端透明。
GET 获取资源
GET方法用来请求已被URI识别的资源。指定的资源经服务器端解析后返回响应内容(也就是说,如果请求的资源是文本,那就保持原样返回;如果是CGI[通用网关接口]那样的