HTTP in Flask

来源:互联网 发布:java webservice教程 编辑:程序博客网 时间:2024/04/28 15:27

再从宏观上看一下flask应用启动的过程。
先记住,HTTP是一个客户端和服务器端请求和应答的协议标准。


首先,在浏览器中输入要访问的网址,到浏览器显示内容,大概经历了以下过程:

浏览器发送请求到服务器 —> 服务器处理请求 —> 将处理结果作为响应发送给浏览器 —> 浏览器显示响应。

1 首先,浏览器发送一个HTTP请求。

比如,直接在浏览器中访问 http://127.0.0.1:5000/,(127.0.0.1:5000 是本机IP地址,这里没有本地服务器,自然连接不到服务器,也没有收到响应)。

这里写图片描述

在浏览器中按F12 键 → NetworkF5刷新 → 点击左侧的127.0.0.1 请求 → 右侧Headers 中有相关的请求信息(和网页中显示的一致,没有响应信息)。

    对应的头部信息也很少:
  • Request URL :请求的URL 地址,要访问的网址。
  • User-Agent: 请求头信息。

这里写图片描述


2 服务器收到请求,生成一个HTML文档。

这里就是WSGI 处理请求的过程,上篇笔记有详细处理过程。这里复习一下

from flask import Flaskapp = Flask(__name__)@app.route("/")def index():    return "2017-08-21"if __name__ == '__main__':    app.run(debug=True)

在命令行运行flaskapp,会创建一个本地服务器,并将flaskapp 信息传到本地服务器:

  • app = Flask(__name__) 实例化一个app 应用。
  • 运行@app.route("/") 时添加了 '/''index()' 函数的映射关系(运行run 方法时这个这个映射关系也会传到 WSGI server 中 。
  • run 方法运行时建立了本地服务器 WSGI server
  • 处理一个请求是在wsgi_app 中进行的。
  • 具体处理过程不看,wsgi_app 会根据客户端请求的URL 匹配app 应用中的URL,返回app 应用中的URL 对应的视图函数(index())中的内容,然后将视图函数的返回内容变成真正的响应(HTTP文档)。


这时候在浏览器中访问 http://127.0.0.1:5000/:

3 服务器将 HTML 文档作为HTTP响应发送给浏览器;

4 浏览器收到响应,从HTTP body 取出HTML 文档并显示。

浏览器中不光有了请求头部信息,也有了响应头部信息:

这里写图片描述


先在命令行看 WSGI server
最后一行是请求发生之后的变化:

  • 127.0.0.1 是当前请求
  • 接着是请求发生的时间
  • GET表示一个读取请求,将从服务器获得网页数据(前面建立了/index() 的映射关系。GET / 这里获取视图函数index() 的内容)。
  • HTTP/1.1 为使用的HTTP 协议的版本
  • 200HTTP 状态码,表示处理成功

这里写图片描述


浏览器中记录了更详细的信息:

这里写图片描述

首先,Headers 中的General


  • Request URL 为请求的URL 地址,即要访问的网页地址。
  • Request Method 为请求方法,GET表示一个读取请求,将从服务器获得网页数据。
  • Status CodeHTTP 状态码,200 OK 表示成功。
  • Remote Address 为远程地址,127.0.0.1:5000 是本机的IP 地址。
  • Referrer Policy:no-referrer-when-downgrade 仅当发生协议降级(如 HTTPS 页面引入 HTTP 资源,从 HTTPS 页面跳到 HTTP 等)时不发送 Referrer 信息。

然后,Response Headers


  • Content-Length10 即响应内容2017-08-21 的长度。
  • Content-Type 表示响应内容的格式,这里的text/html表示HTML网页。(浏览器就是依靠Content-Type来判断响应的内容是网页还是图片,是视频还是音乐。浏览器并不靠URL来判断响应的内容,所以,即使URL是http://example.com/abc.jpg,它也不一定就是图片。)
  • Date :Fri, 25 Aug 2017 10:06:11 GMT表示响应的时间,GMT 为格林尼治标准时间,一般指世界时。
  • Server:Werkzeug/0.12.2 Python/3.6.1 记录了服务器信息,即前面运行flask 应用时创建的WSGI server

最后,Request Headers

  • 重要的是这个Host,这里就是localhost127.0.0.1:5000


Response 中记录了响应内容信息:

这里写图片描述

和网页显示的内容对应:

这里写图片描述


以上,完成了浏览器发送请求到服务器 —— 服务器处理请求 —— 将处理结果作为响应发送给浏览器 —— 浏览器显示响应的过程。