浅析Python 中的 WSGI 接口和 WSGI 服务的运行


Posted in Python onDecember 09, 2020

HTTP格式
HTTP GET请求的格式:

GET /path HTTP/1.1
Header1: Value1
Header2: Value2
Header3: Value3

每个Header一行一个,换行符是\r\n

HTTP POST请求的格式:

POST /path HTTP/1.1
Header1: Value1
Header2: Value2
Header3: Value3

body data goes here...

当遇到连续两个\r\n时,Header部分结束,后面的数据全部是Body。

HTTP响应的格式:

200 OK
Header1: Value1
Header2: Value2
Header3: Value3

body data goes here...

HTTP响应如果包含body,也是通过\r\n\r\n来分隔的。需注意,Body的数据类型由Content-Type头来确定,如果是网页,Body就是文本,如果是图片,Body就是图片的二进制数据。

当存在Content-Encoding时,Body数据是被压缩的,最常见的压缩方式是gzip。

WSGI接口
WSGI:Web Server Gateway Interface。

WSGI接口定义非常简单,只需要实现一个函数,就可以响应HTTP请求。

# hello.py

def application(environ, start_response):
  start_response('200 OK', [('Content-Type', 'text/html')])
  body = '<h1>Hello, %s!</h1>' % (environ['PATH_INFO'][1:] or 'web')
  return [body.encode('utf-8')]

函数接收两个参数:

  • environ:一个包含所有HTTP请求信息的dict对象;
  • start_response:一个发送HTTP响应的函数。

运行WSGI服务
Python内置了一个WSGI服务器,这个模块叫wsgiref,它是用纯Python编写的WSGI服务器的参考实现。

# server.py

from wsgiref.simple_server import make_server
from hello import application

# 创建一个服务器,IP地址为空,端口是8000,处理函数是application:
httpd = make_server('', 8000, application)
print('Serving HTTP on port 8000...')
# 开始监听HTTP请求:
httpd.serve_forever()

在命令行输入python server.py即可启动WSGI服务器。

启动成功后,打开浏览器,输入http://localhost:8000/,即可看到结果。

Ctrl+C可以终止服务器。

以上就是浅析Python 中的 WSGI 接口和 WSGI 服务的运行的详细内容,更多关于Python WSGI接口和WSGI服务的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python自动化测试Eclipse+Pydev 搭建开发环境
Aug 15 Python
Python的装饰器使用详解
Jun 26 Python
浅析python协程相关概念
Jan 20 Python
Python中enumerate()函数编写更Pythonic的循环
Mar 06 Python
python3.5基于TCP实现文件传输
Mar 20 Python
django使用LDAP验证的方法示例
Dec 10 Python
Python识别快递条形码及Tesseract-OCR使用详解
Jul 15 Python
Python整数与Numpy数据溢出问题解决
Sep 11 Python
TensorFlow2.0:张量的合并与分割实例
Jan 19 Python
python GUI库图形界面开发之PyQt5信号与槽基本操作
Feb 25 Python
Python脚本破解压缩文件口令实例教程(zipfile)
Jun 14 Python
python安装后的目录在哪里
Jun 21 Python
python dir函数快速掌握用法技巧
Dec 09 #Python
5 分钟读懂Python 中的 Hook 钩子函数
Dec 09 #Python
Python爬虫教程之利用正则表达式匹配网页内容
Dec 08 #Python
Python创建文件夹与文件的快捷方法
Dec 08 #Python
Python之字符串的遍历的4种方式
Dec 08 #Python
利用python爬取有道词典的方法
Dec 08 #Python
Python控制鼠标键盘代码实例
Dec 08 #Python
You might like
2019年漫画销量排行榜:鬼灭登顶 海贼单卷制霸 尾田盛赞鬼灭
2020/03/08 日漫
phpmyadmin导入(import)文件限制的解决办法
2009/12/11 PHP
Pain 全世界最小最简单的PHP模板引擎 (普通版)
2011/10/23 PHP
谨慎使用PHP的引用原因分析
2012/09/06 PHP
thinkphp控制器调度使用示例
2014/02/24 PHP
php实现微信公众平台发红包功能
2018/06/14 PHP
让网页根据不同IE版本显示不同的内容
2009/02/08 Javascript
jQuery JSON的解析方式分享
2011/04/05 Javascript
javascript上传图片前预览图片兼容大多数浏览器
2013/10/25 Javascript
详解JavaScript对W3C DOM模版的支持情况
2015/06/16 Javascript
js表单处理中单选、多选、选择框值的获取及表单的序列化
2016/03/08 Javascript
AngularJS上拉加载问题解决方法
2016/05/23 Javascript
微信小程序  网络请求API详解
2016/10/25 Javascript
微信小程序  audio音频播放详解及实例
2016/11/02 Javascript
jQuery EasyUI 获取tabs的实例解析
2016/12/06 Javascript
js实现点击按钮弹出上传文件的窗口
2016/12/23 Javascript
Angular2生命周期钩子函数的详细介绍
2017/07/10 Javascript
nodejs实现一个word文档解析器思路详解
2018/08/14 NodeJs
node.js实现微信开发之获取用户授权
2019/03/18 Javascript
python根据时间生成mongodb的ObjectId的方法
2015/03/13 Python
使用pdb模块调试Python程序实例
2015/06/02 Python
深入讲解Java编程中类的生命周期
2016/02/05 Python
Python编程实现使用线性回归预测数据
2017/12/07 Python
Python实现的双色球生成功能示例
2017/12/18 Python
Python程序员面试题 你必须提前准备!(答案及解析)
2018/01/23 Python
python OpenCV GrabCut使用实例解析
2019/11/11 Python
双向RNN:bidirectional_dynamic_rnn()函数的使用详解
2020/01/20 Python
jupyter notebook插入本地图片的实现
2020/04/13 Python
SmartBuyGlasses中国:唯视良品(销售名牌太阳镜、墨镜和眼镜框)
2017/07/03 全球购物
波兰最大的电商平台:Allegro.pl
2021/02/06 全球购物
东方红海科技面试题软件测试方面
2012/02/08 面试题
校外活动方案
2014/08/28 职场文书
公司收款委托书范本
2014/09/20 职场文书
2015年节能减排工作总结
2015/05/14 职场文书
幼儿园科学课教学反思
2016/03/03 职场文书
详解redis在微服务领域的贡献
2021/10/16 Redis