五、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()
posted @ 2021-06-04 20:20  zzwYYYYYY  阅读(94)  评论(0)    收藏  举报