caching - 服务器正在提供旧版本的静态文件,但经过修剪或填充以匹配新版本的长度

标签 caching flask gunicorn werkzeug

我的问题的症状非常符合这个问题:Changed static files are cropped/padded to the new size and served the old - Fedora

每当我对静态文件(例如 .js 和 .css)进行更改时,这些更改都不会显示在提供的文件中。但是,如果我的更改导致文件更改长度,则提供的文件确实与新长度匹配:

  • 如果我从静态文件中的任何位置删除字符,则所提供的文件最后会被修剪掉那么多字符。
  • 如果我将字符添加到静态文件中的任何位置,则所提供的文件将在末尾填充那么多 �(即 U+FFFD)字符。

  • 链接的答案不能解决我的问题的原因是我没有使用 Apache。我正在为 Heroku 编写一个 Python Web 应用程序,所以我使用的是 gunicorn 和 Flask(因此是 Werkzeug)。链接的答案说在 Apache 中禁用 sendfile 解决了这个问题,所以我尝试将 'USE_X_SENDFILE' 变量设置为 False,根据 this page ,但这没有帮助。我还将“SEND_FILE_MAX_AGE_DEFAULT”设置为 1 以进一步尝试防止发生某种缓存,但这也无济于事。

    如果不是很明显,我真的对配置网络服务器一无所知,因此在用完相关的 Google 搜索结果后,我不知道是什么原因导致了这种情况。帮助?

    最佳答案

    Virtualbox hates sendfile.如果您将其关闭,它应该可以工作。

    例如在 nginx 中,您需要添加 sendfile: off; .
    在 Apache 中,它只是 EnableSendfile off .

    关于caching - 服务器正在提供旧版本的静态文件,但经过修剪或填充以匹配新版本的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17460463/

    相关文章:

    redirect - Nginx、gunicorn、python-flask 应用程序。 https 在重定向时丢失

    docker - 使用Docker Compose运行单个测试功能

    python - 如何理解gunicorn中的workers是如何被消耗的

    node.js - 如何在 ExpressJS + NodeJS 中禁用网页缓存?

    java - 如何使用 Spring MVC 和 Spring Security 为资源处理程序启用 HTTP 缓存

    ruby-on-rails - 如何缓存 Rails webpack 包

    python-2.7 - Flask 中的 http header 在 Linux 服务器上不起作用

    javascript - 如何通过 POST 传递 Javascript 变量以在 Flask 中使用?

    internet-explorer - 在 Internet Explorer 中第二次调用后 jQuery ajax 不工作

    python - 如果我不提供任何静态内容,我是否需要 Nginx 和 Gunicorn?