自己动手写http服务器(三) -- 代码实现

系列文章:
自己动手写http服务器(一) -- UNIX C 网络编程
自己动手写http服务器(二) -- http协议分析
自己动手写http服务器(三) -- 代码实现

有了前两篇的描述,我们就能实现一个简单的web服务器了。

效果

先来介绍一下最终的效果:

我们通过编译生成两个可执行文件: fhttpdlogin.cgi,其中,fhttpd 是我们的web服务器软件,而 login.cgi 是用C语言编写的可执行文件,用于动态生成web页面;

开启服务器并访问的过程如下:

1、启动服务器

通过命令 ./fhttpd 端口号 指定在本机开启的web服务端口,并启动服务,如:

自己动手写http服务器(三) -- 代码实现_第1张图片

启动web服务

我们就开启了web服务,开启的端口为 8888

服务器访问

在浏览器中输入 :localhost:8888 就可访问启动的服务器:

自己动手写http服务器(三) -- 代码实现_第2张图片

访问Web服务

登陆

通过输入用户名和密码,服务器会校验用户是否存在,分为3种情况:

1、用户名不存在

例如,输入用户名:foolish ,密码:abc,web服务器发现找不到该用户名,则显示如下:

自己动手写http服务器(三) -- 代码实现_第3张图片

用户不存在

2、密码不正确

例如,输入用户名:admin ,密码:abc,显示如下:

自己动手写http服务器(三) -- 代码实现_第4张图片

密码错误

3、成功登录

例如:输入用户名:admin ,密码:123456,显示如下:

自己动手写http服务器(三) -- 代码实现_第5张图片

成功登录

源码

源码可以下载zip包,地址为:
https://github.com/foolishflyfox/fhttpd/archive/master.zip

有git的同学也可以通过git下载,使用命令:

git clone https://github.com/foolishflyfox/fhttpd.git

git clone [email protected]:foolishflyfox/fhttpd.git

均可下载;

在这里就不贴代码凑字数了,需要的自己下 _

说明

这里说一下代码中的几个文件的用途:

  • fhttpd.c : 服务器源码
  • login.c:编译出 login.cgi 的源文件
  • index.html : 只在浏览器中输入 IP:端口号 将反馈该html文件;

其他的几个很好理解,不再赘述;

要编译出 fhttplogin.cgi ,只须执行 make 命令即可;

代码中的所有变量都用小驼峰命名法,结构体类型用大驼峰命名法,枚举类型及宏定义名全部大写;

由于代码中使用了一些 Unix/Linux 系统函数的库,所以,windows下不一定能编译通过,可以在windows下安装Cygwin 或者 在Windows的内置Linux子系统下进行编译运行;

涉及内容

虽然主要的源文件 fhttp.c 只有400行只有,但是内容并不少,主要包括:

  • 网络编程(TCP)
  • 多线程
  • 多进程
  • 管道通讯(IPC,进程间通讯的一种方式)
  • 数据的重定向
  • 基础C编程

应用

这样小又简单的Web服务器,对于大型的Web服务当然不能支持。但是,在某些嵌入式中,由于受制于硬件限制,也许用得到,比如,很多的路由器中,还是使用cgi提供web服务来对路由器进行配置。

建议

可以在理解的大概的思路以后,自己从零开始写一遍,而不是照抄一遍,在遇到问题时再参考代码,这样能够理解得更加深刻。

存在的问题

为了代码的简单起见,我们只是用了http协议字段中的很少很少一部分的内容,而且提供的是响应后立马断开连接的Http/1.0服务,所以,有时候会出现web页面刷新不出来情况。

如果想要大概了解一下Web服务器的工作流程,写完这个,就差不多能够达到目的了!



作者:FoolishFlyFox
链接:https://www.jianshu.com/p/5da0938a8e54
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

你可能感兴趣的:(【HTTP】)