一、web框架原理图
如果服务器采用非CGI方式处理浏览器的请求,则直接返回浏览器请求的资源即可。采用CGI方式的话则要执行CGI程序:
二、多线程http服务器的工作方法
1.http/1.0版本采用的是短连接:
我们要搭建的是多线程服务器,并且使用短连接,所以每当建立一个连接之后,就创建一个线程去处理这个请求,并将这个线程设置成分离状态,然后主线程继续处于监听状态。当线程处理完这个请求之后就断开连接。这样的一个来回就完成了连接请求。
2.支持实现GET和POST方法:
GET方法:如果GET方法只是简单的请求一份资源,而不去传递参数的话,则由服务器直接直接将请求资源返回即可。如果GET方法的url中带参,则要用CGI模式进行处理。
**POST方法:**POST方法则要直接使用CGI模式进行处理。POST方法的参数在消息正文中出现。
那么问题来了,如何判断请求的方法呢?
请求方法是在请求报头的请求行给出的,所以要按行读取请求报头,判断第一行中的方法,是否为CGI模式。
3.非CGI模式
当我们判断是GET请求时,若URL中没有参数,则使用非CGI模式。非CGI模式的执行方法比较简单,首先解析出请求路径,若请求的是合法资源则返回这个资源。
4.CGI模式
当是CGI模式处理请求的时候,就需要fork一个子进程,对子进程exec替换CGI程序。
三、项目整体逻辑
四、代码链接
GitHub链接:
日历计算器代码链接:
项目运行演示:
功能一:
功能二:
功能三: