【问题标题】:Flask static file Cache-ControlFlask 静态文件 Cache-Control
【发布时间】:2012-07-06 13:22:47
【问题描述】:

我正在尝试在开发过程中为我的 JS 文件设置合理的缓存过期时间。我有标准设置,其中 HTML、CSS 和 JS 位于 static 目录下。

docs 确实提到了这一点,但对于我来说,我无法让它发挥作用。我已经尝试了两种隐含的方法,首先

class MyFlask(flask.Flask):
    def get_send_file_max_age(self, name):
        if name.lower().endswith('.js'):
            return 60
        return flask.Flask.get_send_file_max_age(self, name)

app = MyFlask(__name__)

app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 60

两者都没有效果,我 /static 下的 JS 文件仍然以默认的缓存超时返回,

Cache-Control: public, max-age=43200

任何指针表示赞赏。

【问题讨论】:

  • 1.你使用的是烧瓶开发服务器还是像 nginx 这样的 http 代理? 2.你应该使用return super(MyFlask, self).get_send_file_max_age(name)而不是return flask.Flask.get_send_file_max_age(self, name)
  • 上述课程对我有用,使用默认的烧瓶开发服务器。
  • 出于这些和性能原因,我(以及我听到的许多其他人)让我的静态文件直接由我使用的任何网络服务器(nginx/apache)提供服务。
  • @Jarus 抱歉回复缓慢(2 年)。这只是开发服务器。我想我从来没有解决过这个问题,不久之后就停止使用 Flask(不相关的原因)。感谢您的意见。
  • 对于那些稍后到达这里的人......这个answer 的相关问题可能会有所帮助。您可以使用 Response 对象上的“cache_control”集合来修改 Flask 发送的缓存控制标头。请参阅文档here

标签: python flask cache-control static-files


【解决方案1】:

您可能需要查看webassets 来管理缓存到期。它适用于开发和生产环境。

【讨论】:

    【解决方案2】:

    我遇到了这个问题,在网上找不到适合我的答案。

    然后我意识到我的静态文件根本不是从 Flask 提供的! Flask 只生成我的 HTML。静态文件直接由我的网络服务器提供(在我的例子中是 Apache,你的可能是 Nginx 或其他)。

    这里是 Apache 的说明。

    首先安装 mod_expires 模块:

    sudo a2enmod expires

    然后将这样的内容添加到您的.htaccess 文件中:

    ExpiresByType text/css "access plus 1 year"
    ExpiresByType application/javascript "access plus 1 year"
    ExpiresByType image/* "access plus 1 year"
    

    更多详细配置请到Apache manual

    【讨论】:

      猜你喜欢
      • 2023-01-14
      • 2015-03-07
      • 2022-11-17
      • 2021-05-12
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      • 2019-09-19
      • 2021-08-23
      相关资源
      最近更新 更多