回顾通过前几篇文章的内容, 我们已经基于 Python 的 Flask 框架搭建了一个基本 Web 应用, ~/webapp/server.py 的代码如下from flask import Flaskfrom flask.views import MethodViewapp = Flask(name)class IndexHandler(MethodView): def init(self, name): print(name) def get(self): return ‘It is a GET request’ def post(self): return ‘It is a POST request’if name == ‘main’: app.add_url_rule(’/’, view_func=IndexHandler.as_view(‘index’)) context = (’./server.cer’, ‘./server.key’) app.run(port=443, host=‘0.0.0.0’, debug=True, threaded=True, ssl_context=context)此外, 我们还为其申请了公网 IP 和域名 www.awesome.com , 并且部署了 Let’s Encrypt 的 HTTPS 证书. 现在, 当我们在浏览器地址栏输入 https://www.awesome.com 即可访问我们的网站.不过, 我们的网站目前还存在几个问题:1.无法访问 http://www.awesome.com2.每次都需要用户手动输入 https:// 前缀以制定 https 形式的访问为此, 我们需要重新编写一个 server 并监听 80 端口, 并对所有请求返回一个 redirect 响应, 把所有 http 请求都重定向为 https 请求. 最后, 我们还将开启 HSTS, 方便用户、提高安全性的同时减少无效的访问.监听 80 端口考虑我们的目的只是为了进行重定向, 我们不如暂且撇开 Flask, 用 Python 自带的网络库写一个简单的 server, 把它当成一个练手的 demo.结合文档 wsgiref, 我们可以写出如下代码from wsgiref.util import setup_testing_defaultsfrom wsgiref.simple_server import make_serverdef simple_app(environ, start_response): status = ‘200 OK’ headers = [(‘Content-type’, ’text/plain; charset=utf-8’)] start_response(status, headers) ret = [("%s: %s\n" % (key, value)).encode(“utf-8”) for key, value in environ.items()] return retwith make_server(’’, 80, simple_app) as httpd: httpd.serve_forever()