一.HTTP
1.结构图
![HTTP和wsgi基本介绍_第1张图片](http://img.e-com-net.com/image/info8/39b989be14f54628a02e488aeb5ff685.png)
如图,HTTP的基本结构解释这样的-----客户端发送一个Request请求到服务端,服务端在返回一个Response回应给客户端。
客户端就是我们平常所用的浏览器了,如baidu,google,firefox等等都是客户端,而服务端一般是一些比较大的服务器了。
2.Request和Response
Request和Response的大概样子就是这样了,其中报头部分里面的很多参数没给出来,有需要的话请百度一下,我就不一一列举。
不过其中的一些重要参数必须得扩展讲一讲。
Request:get和post的区别
get:从服务端请求获得指定的消息,有大小要求,太长的请求不适合用GET方法。请求方法包含在Request头 部,因此,很容易被其他人看到,可能造成用户信息泄露等风险。
POST:向服务端传递信息,无大小要求,包含在正文里面,更加安全。但是传递速度较慢,而且有可能改变 服务端的数据。
Response:主要是cookie
因为HTTP本身是无状态的,所以用户每一次打开网页都会加载一次网页,对于新网页来说没什么问题,但是 如果打开已经浏览过的网站,又得重新加载,这对客户端和服务端都会造成一定压力,因此,cookie被创造 出来解决这个问题。
如图,就是一个百度cookie的例子,cookie一般包含name,password,id等很多信息,用来验证用户是否登陆 过该网站。第一次登陆,服务器会给你生成一个cookie,下次再登陆时,Request头部就会自动把cookie发 送过去,通过验证。
不过,cookie也是有坏处的。在cookie存活的生命周期内(expires参数),cookie是保存在用户的电脑里 的,用户可以查看甚至修改cookie,基于这一原因,有的骇客会利用cookie的一些参数来盗取用户的信息, 也有一些专门注入cookie的病毒。所以有的用户会关掉cookie(浏览器中可以设置),但这样,用户不得不 承担更多的流量。(虽然有的cookie加密过,但还是不安全)
为了解决这个问题,session出现了。为保证读取速度够快,session储存在服务器的内存里,但是 这又
给服务器带来很大的压力。
两者都有利弊,就看用户怎么选择了。
三.wsgi
1.wsgi和cgi介绍
cgi
在介绍wsgi(website server gateway interfaces)之前,我先说说cgi(common gateway interfaces 通用网关接口)吧。
cgi的作用就是处理包装Server传过来的参数,然后把处理后的参数分配到绑定的脚本上去运行,脚本又结合数据库,进一步处理数据,最后又把数据还给cgi,cgi再次处理包装后,传给Server,Server再传给Client。
wsgi
wsgi是专用于Python的一种网关规范,并不是一个实际的应用程序,只是规范了处理函数的输入和输出格式。
Python本身由于灵活性强,被称之为“胶水语言”,与之对应的服务器种类就比较多,web框架也比较多,没有什么超级大boss之类的。但是由于服务器与app之间定义的接口没有一种规范,很多时候,用Python写的脚本代码无法在各个服务器上通用,这与它当初被设计时的灵活性完全不同,于是,pep3333中对这些欣慰定了一个规范,方便Python代码的通用,但wsgi并不强制要求代码非要要这样写,毕竟以方便程序员而生。
wsgi详解
wsgi把web组件分为三类:web Server , middleware, web app。
middleware:包装处理Server传过来的的信息,包装在environ,start_request参数中,传给app处理。
app:处理数据
server:
1.服务器创建socket,监听Port,并等待客户端connect。
2.当有请求时,Server解析client信息放到environ中。
3.handler处理这个HTTP请求,并把method,path放入environ中。
4.wsgi handler再把Server信息也放入environ中。
5.client,Request,Server信息全放入environ中。
6.wsgi handler调用注册的wsgi app ,并将environ和回调函数传入给wsgi app。
7.wsgi app 讲Response header/status/body回传给wsgi handler。
8.最终handler通过socket将信息Response传回给client。
总结,有没有觉得这样编程会是一个很繁琐的过程?而且无趣?
不要急,很多web框架已经被开发出来了,你的web编程效率将大大提高。
下面给出一些Python web框架:
Django:用得最多,但是文件比较大
flask/bottle:都是轻量级的web框架,用来开发一些小的web应用效果会更好。