基于http协议实现的自主web服务器

在学习完网络的基本知识后,一直希望有一个能够将所学知识能够结合实际进行练习的机会。因此,我在这里做了一个简单的模拟服务器工作的小项目。
这个简单的服务器程序将能基本实现基本的被访问的功能,能够收到浏览器或其他主机上进行的访问,并能够对请求做出基本的相应,项目是基于http协议的,因为http协议一般在我们日常的网络行为中使用的还是比较高频的。
http协议有这么几个基本的特点:
1.简单快速,因为http的服务器端程序一般相对规模较小,通信速度较快
2.灵活,http协议的同行兼容任意类型的资源,正在传输的资源类型统一用Content-Type来标记
3.无连接每次连接只处理一个请求,服务器对请求做出响应之后,就会断开连接,因此节省时间
4.无状态无状态就是指每次只有在新请求来了才会产生新响应,协议本身不会保留之前的请求和响应,这样可以更快的处理大量的事务。

对于http协议来说,一般的行为就是请求和响应两种行为。
基于http协议实现的自主web服务器
文章图片

而一般的请求与相应分别是长这样的:
基于http协议实现的自主web服务器
文章图片

基于http协议实现的自主web服务器
文章图片

基本上请求和响应都是可以分为好多种的,一般的,请求我们主要用到的是GET方法和POST方法,还有好多种,但不是比较常用的,因此一般我们只涉及到这两种。
【基于http协议实现的自主web服务器】而响应一般是根据响应状态码来进行划分的,这基本可以分为这么几大类:
基于http协议实现的自主web服务器
文章图片

其实,基本上我们的服务器程序,我们就可以把它理解为是一个通过http协议进行限制的tcp通信socket套接字编程时所做的服务器客户端的那么一个程序,我们给这个服务器程序加上了一个http协议,让它发送的数据都是http封装的报文,由于有http协议,因此,这个服务器就有了可以解析浏览器发来的请求,并依据请求返回对应的响应。
而为了让我们这个服务器程序能够更好用,上面的这些当然还是不够的,因此通常我们可以引入一个cgi模块,cgi模块其实就是一个cgi程序与web服务器之间的接口标准,可以在对应的cgi程序与web服务器端进行通信的桥梁。
有了这个模块,比如我们就可以在服务器上做一个简单的计算器程序,那么当用户在页面上进行计算请求时,服务端就会启动这个计算器程序,并将结果返回给用户。这就实现了用户与服务器之间的交互。
基于http协议实现的自主web服务器
文章图片

一般服务器都是会同时被多个用户进行访问的,大量链接的进入会让服务器内部的进程或线程暴增,那么这对于服务器来说是相危险的,因此,我们其实可以通过线程池来有效的解决这个问题。这是非常重要的一点。
这里是我自己的一点模拟实现:https://github.com/sunjiyuansjy/MyProject_httpweb.git

    推荐阅读