首页 > 解决方案 > 通过我在 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))

谁能解释为什么会这样?我该如何对此进行验证?我正在本地机器上进行测试。

添加:

标签: python-2.7flask

解决方案


最后,由于没有人对我的问题发表评论或回答,我自己有解决方案。

该问题是由我们下载文件时浏览器上的缓存数据引起的。解决方案是通过多种方式禁用浏览器上的缓存数据。我选择实现的最佳方法是在 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

这样,下载文件时将没有缓存,并且序列下载将从新鲜开始,这将作为我的问题中的代码片段进行检查和验证。

希望这对寻求解决我的问题的其他开发人员有所帮助。

谢谢,

问候


推荐阅读