五、WSGI
五、WSGI

名词解释:
- 浏览器:用于访问HTTP服务器的一个软件
- WSGI Server:拥有WSGI功能的一个HTTP服务器
- WSGI:Web Server Gateway Interface,规定服务器端和应用程序WSGI APP间的接口规则
- WSGI APP:作为一个应用程序,帮助WSGI server处理它本身所没有的功能
上图详解:
①HTTP请求:浏览器在地址栏输入IP地址和端口号等信息来访问服务器,从而会向服务器发送一个HTTP协议封装的报文,报文中携带了HTTP协议头部和请求信息
②解包,封装environ:WSGI Server服务器在接收到浏览器发来的HTTP请求包后,会将该包进行解包,然后将该包内的请求信息封装成一个字典,字典中的元素以k-v对的形式存储,这种行为称之为封装environ
③调用App:WSGI Server在将数据封装成environ后,会调用WSGI APP,并将封装成environ的数据作为第0参数,start_response函数本身(不是函数调用,没有小括号)作为第1参数,传递给WSGI App
④逻辑处理:逻辑处理是我们自己定义的一个函数,该函数中我们设计了一系列的动作,由该函数将environ进行加工,加工后得到一个返回结果
⑤start_response():输出正确的HTTP状态码和回应头,为后续HTTP服务器向客户端发送正文做前提准备
⑥返回正文:我们定义的函数必须拥有return返回值,这个值可以直接是HTML标签封装的输出内容(’
hello,web
‘),也可以是由列表包括的二进制(['hello,web'.encode('utf8')]),并将这个结果返回给WSGI Server,这个返回结果可以看作是正文
1、WSGI经典使用
from wsgiref.simple_server import make_server
'''
wsgireq就相当于逻辑处理
env---》environ
environ是一个字典类型的数据,其中有一个Key:PATH_INFO对应的Value是客户端的访问路径
res--->start_response()
'''
def wsgireq(env, res):
print(env)
res("200 OK", [("Content-Type", "text/html")])
'''
start_response()是用于服务器向客户端输出规范化的HTTP状态码和报文头,其中:
"200 OK":代表HTTP状态码,字符串数据类型
[("Content-Type", "text/html")]:代表HTTP的回应头,对于HTTP可以拥有多个回应头,每个回应头需要以元组数据类型作为元素存储在字典内
'''
body = "<h1>Hello World!, this is the wsgi response!</h1>"
#return就是返回正文
return [body.encode("utf-8")]
if __name__ == "__main__":
#建立一个WSGI Server连接,绑定本地IP和端口号,并将从客户端获取的信息解包重新封装发往wsgireq函数,由该函数进行处理
httpd = make_server("127.0.0.1", 8000, wsgireq)
sa = httpd.socket.getsockname()
'''
spcket.getsockname()可以获取本地服务器的IP地址和端口号,以数组的形式存储
'''
print("Serving http on",sa[0],'port',sa[1])
#设置WSGI Server连接次数死循环,一般不会中断
httpd.serve_forever()

浙公网安备 33010602011771号