【发布时间】:2021-09-10 17:09:09
【问题描述】:
我在 Chrome 中观察到一个非常有趣的行为,而我在其他浏览器中没有观察到。
Chrome 似乎会在使用 Flask 托管的网络服务器上缓存来自同一 URL 的下载。例如:
@app.route('/download/<string:filename>')
def download(filename):
send_file(filename)
基本上,如果我访问 localhost:3000/download/a_file.exe,那么 a_file.exe 就会被下载。
但是,问题是,如果我修改 a_file.exe(使其成为新的二进制文件),则会下载旧的二进制文件。任何文件格式都一样,真的。我最初是在尝试替换我尝试下载的图片(比如说 hi.jpg)时发现这个问题的。即使我将 hi.jpg 更改为新图片,旧图片也会被下载。
它变得更有趣了。
如果我从我的项目文件夹中删除文件 a_file.exe。理论上它应该抛出一个错误,对吧?不,即使文件不存在,仍然会下载旧的 a_file.exe。
如果我停止服务器,修改download()函数,重启服务器
@app.route('/download/<string:filename>)
def download(filename):
print("hi")
send_file(filename)
现在应该发生的是“hi”被打印出来,但它没有,这意味着 Chrome 基本上完全绕过了实际向服务器发送请求而只是给你文件。
最搞笑的是,即使完全关闭服务器,它还是会下载!!
严肃地说,这很成问题(至少对我而言),因为我的服务器本质上是在不断地修改同一个文件,基本上用户应该能够获得最新版本,而不仅仅是他们缓存的一些随机版本。
同样,这不会发生在其他浏览器上,例如 Edge(也使用 Chromium)。我已经测试了自己。
如果有任何不涉及更改文件名本身的解决方案(因为这可能会解决它,但对我来说实施起来有点问题),请告诉我。提前致谢。
【问题讨论】:
标签: python google-chrome flask