【问题标题】:Purge client browser cache after deploying app to Heroku将应用程序部署到 Heroku 后清除客户端浏览器缓存
【发布时间】:2020-10-26 20:46:47
【问题描述】:

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

【问题讨论】:

    标签: flask heroku deployment browser-cache purge


    【解决方案1】:

    如果您使用相同的文件名,它将使用缓存副本,那么为什么不使用过滤器为您的静态文件提供版本控制呢?您根本不必更改文件名。虽然请阅读提供的链接中的注意事项。

    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 中包含查询字符串。”它 说大多数代理不会缓存带有查询的静态文件 参数。因此,这将增加带宽,因为所有 每次请求都会下载资源。

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

    【讨论】:

    • 那么有什么不同的实现方式可以使静态文件仍然与查询参数一起缓存?
    猜你喜欢
    • 2020-08-31
    • 2021-05-30
    • 1970-01-01
    • 1970-01-01
    • 2012-12-16
    • 2017-02-04
    • 2012-08-15
    • 2018-04-27
    • 2012-01-10
    相关资源
    最近更新 更多