python-2.7 - 通过我在 Flask 中的验证路线从浏览器下载历史通行证打开链接
问题描述
以前,当我没有在下载的路由中设置任何限制或验证时,我的用户已经成功地在我的 Flask 应用程序中下载了一个文件。但是,后来我设置了一些验证,只是为了return '' 404
让用户无法下载文件。这是为了测试目的,然后我才能继续进行。
但是,问题是当我的用户在他们的浏览器(在本例中为 Chrome)中打开他的下载历史记录中的链接时,文件通过我的验证404
响应再次成功下载。
from werkzeug import secure_filename
@app.route('/packages/download/<filename>', methods=['GET'])
def DownloadPackages(filename):
return '', 404 # User should not have downloaded file. But why he still be able to download from history in browser
ConfigPath = 'PYTHON_PACKAGE'
Path = os.path.abspath(app.config.get(ConfigPath))
Path = os.path.join(Path,filename)
return send_from_directory(Path, filename=secure_filename(filename))
谁能解释为什么会这样?我该如何对此进行验证?我正在本地机器上进行测试。
添加:
我注意到从以前的下载历史打开的链接没有显示在运行烧瓶应用程序的终端控制台中。
此外,即使我停止烧瓶在终端控制台中运行,该文件仍然可以从链接下载历史记录中下载。
解决方案
最后,由于没有人对我的问题发表评论或回答,我自己有解决方案。
该问题是由我们下载文件时浏览器上的缓存数据引起的。解决方案是通过多种方式禁用浏览器上的缓存数据。我选择实现的最佳方法是在 Flask 这样的帮助下通过服务器端完成。
# disable cache when download file
response = send_from_directory(Path, filename=secure_filename(filename), as_attachment=True)
response.headers["Cache-Control"] = "no-cache, no-store, must-revalidate"
response.headers["Pragma"] = "no-cache"
response.headers["Expires"] = "0"
response.headers['Cache-Control'] = 'public, max-age=0'
return response
这样,下载文件时将没有缓存,并且序列下载将从新鲜开始,这将作为我的问题中的代码片段进行检查和验证。
希望这对寻求解决我的问题的其他开发人员有所帮助。
谢谢,
问候
推荐阅读
- reactjs - 意外的令牌错误:Yarn 本地包依赖项
- python - 如何检查 Python 字典中存在的相同键
- php - PHP单元测试未能通过所有测试
- php - 如何获取 curl_php() 中使用的 http 方法
- java - 想升级我的 java 8 以使用 TLSV2.0
- spring - Spring Boot 请求映射
- php - 在模型中使用 mysql join 时 Codeigniter 双行结果
- unity3d - 如何在3dsmax中创建一个具有独立部分(手,腿)的人体模型,每个部分都应该能够统一选择为对象?
- django - Django查看if语句
- reactjs - ReactJS:使用反应钩子显示/隐藏具有不同 ID 的不同 div