基于CGI协议的HTTP服务器

本项目主要实现一个HTTP服务器的框架结构,为了了解HTTP服务器的工作流程,下面实现一个多线程版本的HTTP服务器框架,采用CGI协议来进行程序替换完成主要业务,主要支持GET和POST方法。

关于HTTP协议:
https://blog.csdn.net/hansionz/article/details/86137260

关于CGI协议:

如果使用非CGI协议处理浏览器的请求的话很简单,服务器直接将浏览器请求的资源返回即可。但是使用CGI协议方式为浏览器服务的框架原理如下:
在这里插入图片描述
HTTP服务器的工作原理:

  • 搭建的是一个多线程服务器,并且使用短连接。
  • 所以每当建立一个连接之后,就创建一个线程去处理这个请求,并将这个线程设置成分离状态,然后主线程继续处于监听状态。
  • 当线程处理完这个请求之后,然后断开连接。
  • 实现支持GET和POST方法的小型http服务器。
    GET方法:如果GET方法只是简单的请求一份资源,而不传递参数的话则由服务器直接将资源返回即可。如果GET方法的URL中带有参数的话,则就要使用CGI程序进行响应计算。
    POST方法:POST方法要使用CGI程序进行处理。POST的参数在消息正文中出现。
    在这里插入图片描述
  • 由于请求方法在http请求报文中的第一行,所以我们需要按行读取第一行,然后判断是那种方法,然后判断是不是CGI程序。
  • 当我们判断出是GET请求时,并且url中没有参数的时候,就是用非CGI模式。非CGI模式处理起来比较简单,首先我们要解析出请求路径,然后判断请求的是不是合法资源,如果是的话,我们就直接返回这个资源即可。
  • 当是CGI模式处理请求的时候,我们要要将fork一个子进程,对子进程exec替换CGI程序。在这过程中,我们使用pipe进行父子进程之间的通信。可以将参数设置为环境变量,然后CGI程序可以根据环境变量获得参数,从而构造响应结果。

HTTP服务器的主要流程:
在这里插入图片描述项目源码:

https://github.com/hansionz/HttpServer

发布了221 篇原创文章 · 获赞 200 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/hansionz/article/details/86766475