摘要
本文主要是介绍用python自带的BaseHTTPRequestHandler,HTTPServer类实现一个简易的web服务器,从而加深对http协议和web服务器实现、运行原理的理解,同时对web服务器与客户端的交互过程进行详细介绍,明白服务器是如何处理客户端对其请求后,将服务器资源响应给客户端的,更重要的是通过本项目的实现可以了解python的网络开发基础模块和CGI协议,从而拥有能够深入学习python网络开发体系知识基础。
1.引言
对于web应用服务器,相信只要是接触B/S架构开发的都会非常熟悉,动态网页的运行是要在web服务器这样的容器中进行处理,然后将数据返回到客户端进行显示的,对于php,最常见的是Apache,而jsp则是tomcat等轻量级应用服务器的使用是很普遍的,而这些服务器部署起来很容易,但是其实现原理却值得探究。
正好这段时间学习了python,想着实现一个最简单的web服务器应用,可以对客户端的请求进行响应,从而正常显示资源页面。
2.系统结构
对使用的相关技术,相关模块进,实现功能的原理进行介绍,采用框架图,示例图等进行表述,使人可以对系统的框架和原理有个比较好的把握;
用python实现简易服务器,前提需要知道以下几个点:
2.1 B/S架构原理
B代表的是浏览器,S代表的是服务器,B/S交互流程:
[if !supportLists]1. [endif]用户在客户端向服务器发送请求,等待服务器响应;
[if !supportLists]2. [endif]服务器端接收到请求后,对请求的数据进行处理,并产生响应资源数据;
[if !supportLists]3. [endif]服务器将产生的资源数据返回给客户端浏览器
[if !supportLists]4. [endif]浏览器接收并进行解析相关资源文件,然后呈现在客户端界面。
简单原理图如下:
图1 B/S架构原理
2.2 http协议工作原理
http是客户端和服务器端请求和应答的标准,是基于TCP/IP协议之上的应用层协议.
工作原理:当客户端发起一个http请求时,客户端创建一个到服务器指定端口(http默认端口号80)的TCP连接,服务器在指定端口号监听客户端的请求,一旦接收到请求,服务器回向客户端返回一个状态包含状态码以及返回的内容.
http状态码:
[if !supportLists]· [endif]1xx消息——请求已被服务器接收,继续处理
[if !supportLists]· [endif]2xx成功——请求已成功被服务器接收、理解、并接受
[if !supportLists]· [endif]3xx重定向——需要后续操作才能完成这一请求
[if