【问题标题】:Apache serving out of date CSSApache 提供过时的 CSS
【发布时间】:2015-08-19 11:17:21
【问题描述】:

我有一个开发 vagrant box,我正在更新一些 CSS。我的 CSS 正在通过

提供给浏览器
<link rel="stylesheet" href="style.css?v=1439980743">

其中 v=1439980743 是文件修改日期的时间戳。尽管此值在浏览器中正确更改,但从未为 apache 提供新的 CSS。所有浏览器(Chrome、FF、IE)都具有相同的行为,并且清除缓存不会引入新的 CSS。

Fiddler 报告代码 200 表明文件已成功接收(而不是 304),但接收到的文件是旧版本的 CSS。

就好像 Apache 正在缓存旧的 CSS 并每次都提供它,而不考虑系统中的实际文件。

使新 CSS 可用的唯一方法是重命名 CSS 文件,在浏览器中加载页面(在 CSS 上触发 404 错误),然后将其重命名。在下一次刷新时,新的 CSS 变为可用。即使重新启动 httpd 也不允许加载新文件。

Apache/2.2.3 CentOS 5.10 版(最终版)

有谁知道任何可能导致这种情况的 apache 设置?

加载的模块

 core_module (static)
 mpm_prefork_module (static)
 http_module (static)
 so_module (static)
 alias_module (shared)
 authz_host_module (shared)
 autoindex_module (shared)
 dir_module (shared)
 env_module (shared)
 log_config_module (shared)
 mime_module (shared)
 negotiation_module (shared)
 setenvif_module (shared)
 php5_module (shared)

【问题讨论】:

  • 除非您安装/激活了其他缓存模块,否则 AFAIK 在 Apache 级别上没有默认功能可以以这种方式“缓存”静态文件。
  • 这是一个很久以前离开的人设置的流浪盒子。我在系统设置中看不到任何明显的东西,但添加了加载的模块以防万一。
  • 注意:在 httpd.conf 中添加以下内容并重新启动 httpd FileETag None Header unset ETag Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate" Header set Pragma "no-cache" Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT" 基于答案 stackoverflow.com/questions/11532636/…,但这并没有帮助...

标签: css apache


【解决方案1】:

找到答案。显然 vagrant 不支持 sendfile(),所以将以下内容添加到 httpd.conf 解决了我的问题。

EnableSendfile off

【讨论】:

    猜你喜欢
    • 2015-02-12
    • 1970-01-01
    • 1970-01-01
    • 2013-02-26
    • 2018-04-24
    • 1970-01-01
    • 2013-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多