Flask启用HTTPS后请求传输是否加密?日志显示HTTP/1.1存疑
关于Flask HTTPS请求日志显示HTTP/1.1的疑问
我用mkcert生成了自签名CA证书并让系统信任,得到localhost.pem和localhost-key.pem两个文件。启动Flask应用时执行命令:
flask --app=server run --cert=localhost.pem --key=localhost-key.pem --debug
服务器提示已以HTTPS运行,浏览器也能通过HTTPS正常访问。但用Python的requests模块发起请求时,Flask控制台日志显示HTTP/1.1,这让我不确定客户端和服务器之间的请求数据是否是HTTPS加密传输的。
在Flask接口中打印request.is_secure返回True,request.scheme返回https,但日志里的HTTP/1.1让我困惑。
客户端代码(client.py)
import requests data={'username':'pamix'} r = requests.post(url='https://localhost:5000/test',data=data)
服务端代码(server.py)
from flask import Flask,request app = Flask(__name__) @app.route("/test",methods=['POST']) def test(): print(f"is_secure:{request.is_secure}") print(f"scheme:{request.scheme}") return 'test' if __name__=='__main__': app.run()
解答
请求数据确实是通过HTTPS加密传输的,原因如下:
- 日志里的
HTTP/1.1指的是HTTP协议版本,和是否加密无关——HTTPS本质是HTTP+TLS/SSL加密,协议版本依然是HTTP/1.1(或更高),所以日志显示这个是正常的。 - Flask返回的
request.is_secure = True和request.scheme = https是可靠判断依据:这两个属性由Flask根据请求传输层是否经过TLS加密设置,只有HTTPS加密连接的请求才会返回这样的结果。 - 你已通过mkcert配置了可信CA证书,requests发起
https://请求时,会和服务器完成TLS握手,建立加密通道后再传输数据。
内容的提问来源于stack exchange,提问作者Paweł Michoń
相关产品推荐
相关产品推荐

