浅析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中使用支持向量机SVM实践
Dec 27 Python
django用户登录和注销的实现方法
Jul 16 Python
使用Python获取网段IP个数以及地址清单的方法
Nov 01 Python
Python设计模式之外观模式实例详解
Jan 17 Python
Python3 批量扫描端口的例子
Jul 25 Python
利用python实现AR教程
Nov 20 Python
Django集成celery发送异步邮件实例
Dec 17 Python
tensorflow 2.0模式下训练的模型转成 tf1.x 版本的pb模型实例
Jun 22 Python
python 写一个文件分发小程序
Dec 05 Python
python实现不同数据库间数据同步功能
Feb 25 Python
python之PySide2安装使用及QT Designer UI设计案例教程
Jul 26 Python
Python pandas之求和运算和非空值个数统计
Aug 07 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
php中通过smtp发邮件的类,测试通过
2007/01/22 PHP
php笔记之:文章中图片处理的使用
2013/04/26 PHP
PHP图片等比例缩放生成缩略图函数分享
2014/06/10 PHP
php判断用户是否手机访问代码
2015/06/08 PHP
100行PHP代码实现socks5代理服务器
2016/04/28 PHP
jquery的Tooltip插件 qtip使用详细说明
2010/09/08 Javascript
基于jquery实现的文字淡入淡出效果
2013/11/14 Javascript
详解addEventListener的三个参数之useCapture
2015/03/16 Javascript
node.js+jQuery实现用户登录注册AJAX交互
2017/04/28 jQuery
Vue中的Vux配置指南
2017/12/08 Javascript
Vue使用vue-area-linkage实现地址三级联动效果的示例
2018/06/27 Javascript
vue中关闭eslint的方法分析
2018/08/04 Javascript
JS中的算法与数据结构之常见排序(Sort)算法详解
2019/08/16 Javascript
javascript实现函数柯里化与反柯里化过程解析
2019/10/08 Javascript
基于vue-cli3+typescript的tsx开发模板搭建过程分享
2020/02/28 Javascript
vue-cli设置publicPath小记
2020/04/14 Javascript
react实现复选框全选和反选组件效果
2020/08/25 Javascript
vue在图片上传的时候压缩图片
2020/11/18 Vue.js
[05:11]TI9战队采访——VIRTUSPRO
2019/08/22 DOTA
python list 合并连接字符串的方法
2013/03/09 Python
python算法演练_One Rule 算法(详解)
2017/05/17 Python
Python符号计算之实现函数极限的方法
2019/07/15 Python
Python requests设置代理的方法步骤
2020/02/23 Python
python模拟点击网页按钮实现方法
2020/02/25 Python
初学者学习Python好还是Java好
2020/05/26 Python
matplotlib 三维图表绘制方法简介
2020/09/20 Python
python hmac模块验证客户端的合法性
2020/11/07 Python
CSS3 实现弹跳的小球动画
2020/10/26 HTML / CSS
印度尼西亚最大和最全面的网络商城:Blibli.com
2017/10/04 全球购物
如何开启linux的ssh服务
2015/02/14 面试题
户外拓展活动方案
2014/02/11 职场文书
绿色环保演讲稿
2014/05/10 职场文书
法人代表任命书范本
2014/06/05 职场文书
低碳生活的宣传标语
2014/06/23 职场文书
MySQL Router实现MySQL的读写分离的方法
2021/05/27 MySQL
vue实现拖拽交换位置
2022/04/07 Vue.js