首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >缓存页面资源

问缓存页面资源
EN

Stack Overflow用户
提问于 2012-02-10 20:35:17
回答 2查看 624关注 0票数 0

为了减少对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“参数来强制浏览器更新文件,但这并没有发生!!,我添加了这些头信息来缓存文件:

代码语言:javascript
复制
    header("HTTP/1.1 304 Not Modified");
    header("Expires: Sat, 1 Jun 2015 12:00:00 GMT");
    header("Cache-Control: must-revalidate");

然而,当我尝试更改上面URL字符串中的version参数时,虽然浏览器的文件名已更改>,但它并没有下载新的文件内容

这里我做错了什么,如何强制浏览器重新下载具有不同名称的新文件>(但仍然发送上面的标题)

提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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)。

例如:

代码语言:javascript
复制
header("Expires: Sat, 1 Jun 2015 12:00:00 GMT");
header("Cache-Control: max-age=94608000,must-revalidate");
票数 1
EN

Stack Overflow用户

发布于 2012-02-10 20:50:57

你不能。“未修改”的全部要点是,它告诉浏览器文档与它获得的上一个版本是相同的,不应该下载它。

AFAIK,您应该只在响应If-Modified-Since请求时发送它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9227870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档