WSGI协议解析
WSGI协议中包含两个角色:服务器方和应用程序:
服务器方:其调用应用程序,给应用程序提供(环境信息)和(回调函数), 这个回调函数是用来将应用程序设置的http header和status等信息传递给服务器方。
应用程序:请求的统一入口,所有的请求都进入到这个app中来处理,这个app说白了就是一个函数(类中的call是一样的道理)。用来生成返回的header,body和status,以便返回给服务器方。
一个符合WSGI的“Hello World”应用程序如下所示:
def Application(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/plain')])
yield "Hello world!\n"
定义了一个名为Application的应用程序,environ和startresponse,environ是一个字典包含了CGI中的环境变量,startresponse也是一个callable,接受两个必须的参数,status(HTTP状态)和responseheaders(响应消息的头)。 第二行调用了startresponse,状态指定为“200 OK”,消息头指定为内容类型是“text/plain” 第三行将响应消息的消息体返回。
基于这种协议,实现服务器方和应用程序就可以开发一个web框架。目前比较常用的web框架:Django、Flask、Tornado都是实现了基于WSGI协议进一步封装的,把收、发请求响应的过程实现了,对于开发者来说只需要关注自己的业务实现即可。
WSGI协议解析的更多相关文章
- wsgi协议
用来为server程序和app/framework程序做连接桥梁的,使server和app/framework各自发展,任意组合 上图是python3.4标准库里面,关于wsgiserver的实现.从 ...
- wsgi 协议
wsgi 协议 前言 本来没打算这么早就学习 wsgi 的,因为想要学习python 是如何处理网络请求的绕不开 wsgi,所以只好先学习一下 wsgi.先对 wsgi 有个印象,到了学习 Djang ...
- Python Web开发中,WSGI协议的作用和实现原理详解
首先理解下面三个概念: WSGI:全称是Web Server Gateway Interface,WSGI不是服务器,python模块,框架,API或者任何软件,只是一种规范,描述web server ...
- 根据WSGI协议自己实现mini-web框架(1)
1. 为什么要研究WSGI 我之前在学习web开发时,往往都是根据MVT等架构直接写所谓的“视图”,使用其本身自带的http服务器,当时就一直很好奇,为什么有了HTTP协议之后,还要研究WSGI协议, ...
- Python web框架开发 - WSGI协议
浏览器进行http请求的时候,不单单会请求静态资源,还可能需要请求动态页面. 那么什么是静态资源,什么是动态页面呢? 静态资源 : 例如html文件.图片文件.css.js文件等,都可以算是静态资源 ...
- ts 协议解析
pes : http://wenku.baidu.com/link?url=KjcA0qXqZ1bWVQTa8i1YOmygofldSQL7Pjj-zGRw1e_6_LFmVLo5DIWF0SNwVn ...
- [转]netty对http协议解析原理
本文主要介绍netty对http协议解析原理,着重讲解keep-alive,gzip,truncked等机制,详细描述了netty如何实现对http解析的高性能. 1 http协议 1.1 描述 标示 ...
- python - wsgi协议
wsgi - python web server gateway interface 出现的目的是,为了在 python框架开发的时候,更具有通用性.只要符合 wsgi标准,就可以自由选择服务器(ng ...
- twemproxyRedis协议解析探索——剖析twemproxy代码正编
这篇文章会对twemproxyRedis协议解析代码部分进行一番简单的分析,同时给出twemproxy目前支持的所有Redis命令.在这篇文章开始前,我想大家去简单地理解一下有限状态机,当然不理解也是 ...
随机推荐
- Jquery.data()的值存放再什么地方的问题?
Where is jQuery.data() stored? Where does jQuery store the values of the data() that it sets to DOM ...
- JAVA Eclipse如何重命名包
选中某个包之后按F2即可 注意,重命名包不能有大写,而且必须有至少两级(xxx.xxx就是两级) 重命名包之后,你要修改manifest.xml文件
- JAVA_Exception starting filter struts2怎么办
1 请确保你的项目里面有这两个文件,没有则导入 2 如果还不行,并且你设置了Struts的开发模式,并且你的Tomcat的路径有空格,大部分情况是Program File的原因,此时你需要重新安装 ...
- Linux——学习环境搭建
终于决定将学习环境彻底转到Linux上来,下面记录一下转移学习环境的各种软件和环境的安装和配置. 1.centos自带python2.6,之前的博文已经说到已成功更新到python3.3,下面首先安装 ...
- python pip install error
使用pip install的时候报错 解决方法是使用如下的命令进行安装 python -m pip install sqlalchemy 升级pip的命令python2 -m pip install ...
- jquery技术揭秘静态工具函数源码重构
1.调用页面 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...
- libpointmatcher的filter
Maximum Density Filter Points are only considered for rejection if they exceed a density threshold, ...
- Android 图片查看器
1 http://blog.csdn.net/wang8512945/article/details/8075413 2 http://blog.csdn.net/lcore/article/deta ...
- webstore 与 热编译的配置冲突
这个勾去掉就会自动编译了!
- java之JDK动态代理
© 版权声明:本文为博主原创文章,转载请注明出处 JDK动态代理: JDK动态代理就是在程序运行期间,根据java的反射机制自动的帮我们生成相应的代理类 优势: - 1. 业务类只需要关注业务逻辑本身 ...