为了减少对UI资产(JS/CSS)的HTTP请求,我编写了一个PHP脚本来组合这些文件,并将其提供为:" assets /basic,login,jquery-ui-10.css“,这很好用,但我决定更进一步,通过在PHP脚本中添加一个expire头来请求浏览器缓存这些资产组合器(我称之为它们)。当然,在这里我使用htacess RewriteRule功能来引用这个脚本assets.php?files=basic,login,jquery-ui&type= CSS &version=10,让它看起来像一个CSS文件,供浏览器缓存(这样看起来很好:)。我还使用了"version“参数来强制浏览器更新文件,但这并没有发生!!,我添加了这些头信息来缓存文件:
header("HTTP/1.1 304 Not Modified");
header("Expires: Sat, 1 Jun 2015 12:00:00 GMT");
header("Cache-Control: must-revalidate");然而,当我尝试更改上面URL字符串中的version参数时,虽然浏览器的文件名已更改>,但它并没有下载新的文件内容
这里我做错了什么,如何强制浏览器重新下载具有不同名称的新文件>(但仍然发送上面的标题)
提前感谢
发布于 2012-02-10 20:58:55
正如Quentin所说,您必须只发送304响应,以响应If-Modified- send或If-None_match请求。通过发送304响应,您告诉浏览器使用缓存的副本,即使它没有缓存的副本
在实践中,使用304响应实际上可能与提高性能的目的背道而驰,通常更好的做法是忽略有条件的请求,并使用内容和新的缓存指令进行200响应
如果您希望缓存内容,则发送max-age以及Expires头( expires头只对HTTP/1.0客户端是必需的-所有现代浏览器都实现HTTP1/1 -即使您显式地告诉它们使用HTTP/1.0)。
例如:
header("Expires: Sat, 1 Jun 2015 12:00:00 GMT");
header("Cache-Control: max-age=94608000,must-revalidate");发布于 2012-02-10 20:50:57
你不能。“未修改”的全部要点是,它告诉浏览器文档与它获得的上一个版本是相同的,不应该下载它。
AFAIK,您应该只在响应If-Modified-Since请求时发送它。
https://stackoverflow.com/questions/9227870
复制相似问题