打造mvc框架是个连载的博文,虽然说是要造轮子,但其实更多的是学习web框架的具体实现原理。  其实我发现很多web框架没有直接解析http协议的方法,像bottle,flask都是记住于wsgi server来实现的。 关于wsgi协议,我会专门再讲解一次。

正事因为别的web框架没有直接去实现解析http协议的方法,所以引起了不少的兴趣。  其实单纯对于http协议来说,不是所有人都懂其数据格式。 在chrome的开发者工具network是可以看到一些http数据库,只是数据包是被解析后的了。 

该文章写的有些乱,欢迎来喷 ! 另外文章后续不断更新中,请到原文地址查看更新。 http://xiaorui.cc/?p=3193

请求报文的样式:

GET方法的HTTP请求体格式.

POST HTTP请求体的格式.

关于response返回值的http格式,headers跟html body是有空格的.

常见http server response status code归类:

1xx:指示信息–表示请求已接收,继续处理。
2xx:成功–表示请求已被成功接收、理解、接受。
3xx:重定向–要完成请求必须进行更进一步的操作。
4xx:客户端错误–请求有语法错误或请求无法实现。
5xx:服务器端错误–服务器未能实现合法的请求。

这里首先使用python标准库mimetools解析http,当然你完全可以用正则匹配的方式来实现,python有标准模块可以解析http协议的。
mimetools源码地址: https://github.com/python-git/python/blob/master/Lib/mimetools.py


除了使用mimetools Message解析的http协议外,还能使用BaseHTTPServer模块的BaseHTTPRequestHandler基类来解析http包,BaseHTTPServer本身是python内置web服务器,所以他懂得如何解析http协议。


# 如果你的http包体不标准,会出现下面的问题。 一般直接解析来自socket的http包不会出现这问题。


request body已经解析成功了,我们接着来讲cookies和解析url字段。 先手url字段的解析,在python2.6的时候可以使用urllib.parse来解析url中的kv,自从2.7后直接把urlparse独立出来。  urlparse跟mimetools功能有类似,parse_qs方法用来解析kv的。


cookie我们可以借助于标准库Cookie来实现创建和解析cookie, wsgiref用的是cookie,而flask werkzeug用的是cookielib实现的,反正大同小异没啥好说的。 


到这里为止关于http的解析我们已经说完了,那么我们怎么发给对方,其实跟解析http的过程类似,都是拼凑http包体格式就可以了。 下面函数是我在gevent wsgi找到的,一个函数就说明如何拼凑http response包体。

不知道别人是否我个一样,每当搞懂某个算法和数据结构时会异常的高兴,远比看懂一个模块的使用有意思的。 这次”打造mvc架构”重在体会web框架是如何开发出来的,原理是怎么一回事。 连flask,bottle都不自己写http解析模块,我虽然意在造轮子,但也不会这么偏执。  现在的python web框架都有wsgi的支持,我们下次聊聊wsgi带给web框架的好处。

END.



对Python及运维开发感兴趣的朋友可以加QQ群 : 478476595 !!!

另外如果大家觉得文章对你有些作用!   帮忙点击广告. 一来能刺激我写博客的欲望,二来好维护云主机的费用.
如果想赏钱,可以用微信扫描下面的二维码. 另外再次标注博客原地址  xiaorui.cc  ……   感谢!
暂无相关产品