Flask中如何实现静态文件的浏览器缓存?

9 投票
2 回答
15825 浏览
提问于 2025-04-18 12:45

我一直在阅读Python的Flask文档,并在搭建一个本地网站。

刚刚用这个工具进行了一次网站速度测试,我的网站是部署在OpenShift上的,结果是这样的:

分析报告显示我的网站没有缓存静态资源。经过一番谷歌搜索,我了解到:

  • 这和“头部信息”有关。
  • 缓存的副本会保存在客户端机器上,还有在客户端和网站之间的服务器上。

我的问题

  • 我需要在HTML部分添加过期时间和标签吗?还是在HTTP头部信息部分添加?

  • 如果是在HTTP头部信息部分,我该怎么做呢?

如果我在文档中遗漏了什么,请告诉我。

2 个回答

0

我遇到了这个问题,网上找了很久也没找到合适的解决办法。

后来我意识到,我的静态文件根本没有通过Flask来提供!Flask只是生成我的HTML页面,而静态文件是直接由我的网络服务器提供的(在我的情况下是Apache,你的可能是Nginx或者其他的)。

Apache的设置步骤:

首先安装相关的模块

sudo a2enmod expires
sudo a2enmod headers

然后在你的.htaccess文件中添加类似下面的内容:

# Expire headers    
<ifModule mod_expires.c>
  ExpiresActive On
  ExpiresByType image/jpeg "access plus 1 month"
  ExpiresByType image/png "access plus 1 month"
  ExpiresByType image/gif "access plus 1 month"
  ExpiresByType text/css "access plus 1 month"
  ExpiresByType text/javascript "access plus 1 month"
  ExpiresByType application/javascript "access plus 1 month"
</ifModule>

# Cache-Control Headers
<ifModule mod_headers.c>

  <filesMatch "\.(ico|jpe?g|png|gif)$">
    Header set Cache-Control "max-age=2592000, public"
  </filesMatch>

  <filesMatch "\.(css|js)$">
    Header set Cache-Control "max-age=2592000, public"
  </filesMatch>

</ifModule>
# END Cache-Control Headers

Apache的配置修改自 关于如何配置的更多细节可以查看Apache手册

7

你可以使用 'SEND_FILE_MAX_AGE_DEFAULT',或者了解一下 webassests 的相关内容。这里有个链接,可以帮助你更好地理解。

这里有一个类似的问题可以参考。Flask 静态文件的缓存控制

撰写回答