浅析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设置tmpfs来加速项目的教程
Apr 17 Python
Python字典数据对象拆分的简单实现方法
Dec 05 Python
python增加矩阵维度的实例讲解
Apr 04 Python
Python中几种属性访问的区别与用法详解
Oct 10 Python
python面向对象法实现图书管理系统
Apr 19 Python
Python第三方库face_recognition在windows上的安装过程
May 03 Python
python给图像加上mask,并提取mask区域实例
Jan 19 Python
tensorflow 限制显存大小的实现
Feb 03 Python
Python执行时间的几种计算方法
Jul 31 Python
Python生成pdf目录书签的实例方法
Oct 29 Python
用Python实现职工信息管理系统
Dec 30 Python
python中%格式表达式实例用法
Jun 18 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和ACCESS写聊天室(七)
2006/10/09 PHP
Yii学习总结之安装配置
2015/02/22 PHP
PHP7多线程搭建教程
2017/04/21 PHP
PHP字典树(Trie树)定义与实现方法示例
2017/10/09 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
2020/02/21 PHP
jQuery一步一步实现跨浏览器的可编辑表格,支持IE、Firefox、Safari、Chrome、Opera
2009/08/28 Javascript
jQuery+jqmodal弹出窗口实现代码分明
2010/06/14 Javascript
禁用页面部分JavaScript方法的具体实现
2013/07/31 Javascript
JS图片切换的具体方法(带缩略图版)
2013/11/12 Javascript
JS脚本defer的作用示例介绍
2014/01/02 Javascript
node.js Web应用框架Express入门指南
2014/05/28 Javascript
浅谈javascript的Array.prototype.slice.call
2015/08/31 Javascript
jquery实现横向图片轮播特效代码分享
2015/11/19 Javascript
JavaScript判断页面加载完之后再执行预定函数的技巧
2016/05/17 Javascript
JavaScript中style.left与offsetLeft的使用及区别详解
2016/06/08 Javascript
详解使用vue-cli脚手架初始化Vue项目下的项目结构
2018/03/08 Javascript
Nodejs实现爬虫抓取数据实例解析
2018/07/05 NodeJs
JS实现全屏预览F11功能的示例代码
2018/07/23 Javascript
Vue为什么要谨慎使用$attrs与$listeners
2020/08/27 Javascript
Python堆排序原理与实现方法详解
2018/05/11 Python
Python中应该使用%还是format来格式化字符串
2018/09/25 Python
Django高级编程之自定义Field实现多语言
2019/07/02 Python
使paramiko库执行命令时在给定的时间强制退出功能的实现
2021/03/03 Python
三星美国官网:Samsung美国
2017/02/06 全球购物
Haglöfs瑞典官方网站:haglofs火柴棍,欧洲顶级户外品牌
2018/10/18 全球购物
俄罗斯第一家篮球店:StreetBall
2020/07/30 全球购物
什么是数据库锁?Oracle中都有哪些类型的锁?
2015/08/21 面试题
物业管理求职自荐信
2013/09/25 职场文书
一年级语文教学反思
2014/02/13 职场文书
电厂职工自我鉴定
2014/02/20 职场文书
材料化学专业求职信
2014/07/15 职场文书
2014年医院十一国庆节活动方案
2014/09/15 职场文书
初中差生评语
2014/12/29 职场文书
人事行政部各岗位职责说明书!
2019/07/15 职场文书
一文搞懂如何实现Go 超时控制
2021/03/30 Python
Spring整合Mybatis的全过程
2021/06/28 Java/Android