首页 > 解决方案 > 防止在基于 Flask 的 Web 应用程序中缓存 iframe

问题描述

我真的陷入了在我正在进行的编程项目中遇到的缓存问题。基本上我正在生成一个带有 folium 的 Leaflet-Map 并将静态输出存储在我的本地磁盘上。

然后我想在另一个 HTML 页面中显示这个 HTML 作为 iframe。然后,用户应该能够生成一个带有简单表单的新地图和一个 POST 请求到烧瓶,然后重新加载包含带有 iframe 的 HTML 的页面。

问题是一切正常,页面在磁盘上更新,但在浏览器中重新加载页面时却没有。这个问题也与浏览器无关(chrome、firefox、ege)。

我已经尝试了多种方法:

  1. 添加 app.after_request:
@app.after_request
def add_header(response):
    response.headers['Cache-Control'] = 'public, max-age=0'
    return response
  1. 在 iframe 的 url 中添加随机查询参数
  <div class="embed-responsive embed-responsive-16by9">
            
            <script type="text/javascript">
                var url = "map.html?" + (new Date()).getTime();
                window.document.write("<iframe class=\"embed-responsive-item\" id=\"map\" src=" + url + "\></iframe>")</script> 
        </div>
  1. 使用 BS 将元标记添加到 folium 的 HTML 输出: Iframe-Output

这仍然对 iframe 缓存没有任何影响。也许有更好的方法可以做到这一点,或者有人已经遇到过类似的问题。

标签: htmlflaskiframebrowser-cache

解决方案


因此,对于面临类似问题的任何人,请尝试使用 Debug FLASK_ENV=development 并通过 shell 或命令行进行设置。

set FLASK_ENV=development

这仍然不是这个问题的最终解决方案,但如果设置了“开发”,也许有人可以告诉 Flask 配置有哪些变化。缓存肯定发生在服务器端。所有响应标头、元标记和动态 url 都正常工作。在我看来,处于开发模式的烧瓶在磁盘上发生更改时正在重新加载本地文件。


推荐阅读