将应用程序部署到Heroku后清除客户端浏览器缓存

时间:2020-07-06 17:00:44

标签: flask heroku deployment browser-cache purge

我的Flask应用程序由Heroku托管,并在Nginx上提供服务,并将Cloudflare用作CDN。有时,我会更改后端的静态资产(图像,CSS,JS等),这些资产会通过在Heroku上进行部署而发生更改。除非它们手动清除缓存,否则这些更改在客户端的浏览器上不会更改。缓存确实会按照建议每月在客户端浏览器上过期,但是我希望后端在每次部署到Heroku时手动告诉客户端浏览器为我的网站清除其缓存,并且事后它们会加载/重新加载我的网站。有没有办法使这个过程自动化?

1 个答案:

答案 0 :(得分:3)

如果使用相同的文件名,它将使用缓存副本,那么为什么不使用过滤器为静态文件提供版本控制呢?您根本不需要更改文件名。尽管请在提供的链接中阅读有关警告的信息。

import os
from some_app import app


@app.template_filter('autoversion')
def autoversion_filter(filename):
  # determining fullpath might be project specific
  fullpath = os.path.join('some_app/', filename[1:])
  try:
      timestamp = str(os.path.getmtime(fullpath))
  except OSError:
      return filename
  newfilename = "{0}?v={1}".format(filename, timestamp)
  return newfilename

通过https://ana-balica.github.io/2014/02/01/autoversioning-static-assets-in-flask/

“在URL中不要包含用于静态资源的查询字符串。”它 说大多数代理不会通过查询缓存静态文件 参数。因此,这将增加带宽,因为所有 资源将根据每个请求下载。

“要为这些资源启用代理缓存,请删除查询字符串 从对静态资源的引用,而是对参数进行编码 进入文件名称本身。”但这意味着稍有不同 实施:)