浏览器通过 WSGI 请求动态资源的过程
程序员文章站
2022-03-23 17:57:56
...
解释: 市面上的web服务器,如:Nginx、Apache等,可以抗住高并发等等优点。但这个是别人用其他语言写好的框架。 我们的应用框架(django、flask)等, 如果想使用这些web服务器。就必须遵从某种协议, 那就是WSGI协议的由来。其他语言的框架也是会有类似WSGI协议的协议。
解释: 补充一下吧, 浏览器要解析web服务器的数据, 也是有协议的, 必须发送header+body的形式。所以web服务器和应用框架的通信目的就是拿到 header+body。 他们之间的过程如下:
1) 浏览器向web服务器动态发起请求
2) web服务器调用框架的def application(env, set_response_header)
3) 框架通过调用web服务器def set_response_header(header)方法,将header传入函数
4) 调用返回,此时web服务器端已经保存了header信息。
5) 生成动态页面的body信息,
6) 框架返回 响应body给web服务器
7) web服务器把数据返回给浏览器
下面是伪代码:
web服务器:
class Server():
def __init__():
self.header = None
self.body = None
def set_response_header(header):
# 保存 响应头信息
self.headers = headers
# 当接收到浏览器的一个请求并判断是动态资源的请求时;调用框架的application()
server = Server()
server.body = framework.application(environ,set_response_header)
response = server.headers + server.body
应用服务框架
def gen_header():
header = "i am header"
return header
def gen_body():
body = "i am body"
return body
def application(env, set_response_header):
"""
application是在框架中定义,在服务器中被调用
set_response_header 是服务器中的一个设置响应头信息的函数
"""
header = gen_header()
set_response_header(header)
body = gen_body()
return body
上一篇: 270、出界的路径数
推荐阅读