我有一个名为的icons.png的PNG文件,它位于apache服务器上。基本上这个文件是其他小图片元素的组合(CSS Sprite)。当第一次加载页面时,此文件将以正常200 OK响应加载。浏览器多次发送相同内容(PNG图像)的请求
页面加载后;有一些链接悬停在自定义工具提示被触发。这工具提示显示部分图像从icons.png文件作为背景图像的一些HTML元素。
例如HTML代码是这样的:
jQuery(".profile").tipTip({delay: 200, defaultPosition: "top", content: "<a href='#' style='width: 32px; height: 32px; display: block;
背景:网址(图像/ icons.png)no-repeat -200px -64px'></a>"});
[有在HTML文件中的一些其他地方icons.png已转交]
现在,每当我的链接悬停时间,工具提示正在显示,但 同时浏览器正在向服务器发送HTTP请求 icons.png文件。而来自服务器的响应代码是 即将到来304未修改。
尽管文件的内容没有被取出,但是在发送标题(各地的166字节)的开销还是有的每一次,而这又是造成1.5秒一个延迟( 我在一个该死的慢速连接)。在1.5秒的时间段内,工具提示元素没有背景图像&突然,图像突然出现。
这里有
- 的Chrome网络面板的一些屏幕截图:
- 萤火虫网面板:
- HTTP标头:
据我知道一旦资源已获取的浏览器应该保持在其缓存 &从取在有需要的地方,而不是多次请求服务器。
正如我发现,服务器不与内容一起发送任何“过期”或“缓存控制”头。我不确定这是否会成为Chrome的这种特殊行为背后的原因。任何建议非常感谢。
P.S:该应用托管在Heroku的共享主机环境。我在Ubuntu 12.04 x86_64上使用Firefox 15.0 & Chrome版本21.0.1180.89。
你说得对,你需要设置'Cache-Control'和'Expires'头文件。 'icons.png'托管在你自己的apache服务器或heroku上吗? – vikraman 2013-03-05 12:49:48
@ vh4x0r,我已经将所需的'Cache-Control'配置添加到'.htaccess'文件并在我的'localhost'上进行了测试。现在响应标题就像[this]一样(http://i.imgur.com/2hayEoi.png)。现在,Chrome正在执行所期望的事情,即从缓存中获取响应** 200 OK(来自缓存)**而无需请求服务器。查看[chrome](http://i.imgur.com/JUyAn2M.png)的截图。但即使是现在,Firefox仍然在用最终的** 304 Not Modified **响应来访问服务器(参见firebug的[screen-shot](http://i.imgur.com/zd2C8gk.png))。你能证明这一点吗? – dibyendu 2013-03-05 13:38:37
我不能,但我会要求你更新firefox,然后在'about:config'中重新检查你的缓存设置。另外,尝试使用'Last-Modified'标题。 – vikraman 2013-03-05 13:52:59