Flask静态文件缓存控制

22

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

文档确实提到了这一点,但我无论如何都无法使其起作用。我已经尝试了两种方法,首先是:

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

非常感谢任何指针。


5
  1. 你使用 Flask 开发服务器还是像 Nginx 这样的 HTTP 代理?
  2. 你应该使用 "return super(MyFlask, self).get_send_file_max_age(name)" 而不是 "return flask.Flask.get_send_file_max_age(self, name)"。
- Jarus
上述类在使用默认的flask开发服务器时对我有效。 - i_4_got
出于性能和其他原因,我(以及据我所知的许多其他人)都会让我的静态文件直接由我使用的任何Web服务器(nginx / apache)提供服务。 - Markus Unterwaditzer
@Jarus 不好意思回复慢了(2年)。这只是开发服务器。我不认为我曾经解决过这个问题,不久之后就停止使用 Flask(不相关的原因)。无论如何,感谢您的建议。 - markdsievers
对于那些后来到这里的人...这个答案可能会对相关问题有所帮助。您可以使用响应对象上的“cache_control”集合修改Flask发送的缓存控制标头。请参阅此处的文档。 - MNB
2个回答

1
我曾经遇到这个问题,但在网上找不到适合我的答案。
然后我意识到我的静态文件根本没有被 Flask 服务! Flask 只生成我的 HTML。静态文件直接由我的 Web 服务器提供服务(在我的情况下是 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手册


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接