1. 背景
进行web开发时一般是使用各种web框架。很久之前我去探寻web开发原理时随手做的一些笔记,现在抽空整理出来,希望可以对一些人理解wsgi时能够有所帮助。
2. Web编程
做web编程之前先了解两个名词"HTML"、"HTTP"
HTML
HTML全称为HyperText Markup Language,超文本标记语言,也就是常说的网页。如果连这个东西都没有听说过,点击这里了解后再做web编程。
HTTP
HTTP的全称为HyperText Transfer Protocol,超文本传输协议,是一种使用较为广泛的网络协议。从字面意思基本能够看出,HTTP是用来传输超文本。如果对HTTP协议不了解点击这里。
实际上,在web应用中,服务器把网页内容(HTML)传输给浏览器,让浏览器来展示,而浏览器和服务器之间的协议就是使用的HTTP。
所以我把整个web应用的流程大体分为四步:
1. 浏览器发送一个http请求
2. 服务器收到请求,生成一个html文档
3. 服务器把html文档作为http响应的body发送给浏览器
4. 浏览器收到http响应,从http body中取出html文档并显示
3. WSGI
早期的web开发,都是事先将静态的html保存好,用现成的http服务器软件,接受用户请求从文件中读取html返回到浏览器。Nginx、Apache、lighttpd这些常见的静态服务器就是干这件事情的。
而现在的web开发,由早已将静态编写HTML改为动态生成HTML,那么我们就需要对HTTP的请求加以解析,并HTTP协议响应,如果我们自己来写这些底层代码,需要花个把月去读HTTP规范。
作为web开发者,我们希望的是不对底层的HTTP协议自己来做解析,而是只专注于做web的开发。
所以正确的做法是底层代码由专门的服务器软件实现,我们用Python专注于生成HTML文档。需要一个统一的接口,让我们专心用Python编写Web业务。
这个接口就是WSGI:Web Server Gateway Interface。(Web服务网关接口)
WSGI总体分为三大部分
- 应用程序
- 服务器程序
- 中间件
应用程序
接收请求消息,并根据请求消息做出相应的逻辑,动态生成响应信息。
服务器程序
接收应用程序的响应信息,并将响应信息返回给代理服务器。
中间件
服务器程序与应用程序的桥,并非必须,类似于一个路由,根据服务器收到的浏览器请求,映射到不同的应用程序。
这里只是把我对WSGI的理解做了一些整理,对于具体的细节实现有很多人都已经写的非常完美了,如果大家有兴趣的话,可以拉到最后,到参考资料中的几个我认为写的比较好的网址去看一看,可以加深了解。
4. 参考资料