【问题标题】:controlling browser cache控制浏览器缓存
【发布时间】:2011-07-17 17:26:47
【问题描述】:

所以假设我在一个页面中有一大堆图像,然后我转到具有完全相同图像和布局的不同 url,因为 url 不同,浏览器将重新加载所有图像、布局等,并且不会从缓存中显示它们,即使它们是完全相同的图像/布局......

有没有办法防止这种情况并控制浏览器仅使用 javascript、php 或 html 缓存内容的方式?

编辑/添加

另外有趣的是,首先我有同一个站点的两个副本,一个在我的本地服务器上,另一个在远程托管服务器上.....

本地服务器上的一个完美缓存并且没有图像重新出现,而如果我访问远程服务器上的那个,图像将尝试重新出现....尽管文件等实际上是相同的在本地和远程服务器之间...

编辑/添加

另一件有趣的事情....缓存可以在 IE 和 Chrome 上运行,即使对于远程服务器,但由于某种原因,它会在 firefox 中搞砸......

另一方面,本地服务器中的那个甚至适用于 firefox

【问题讨论】:

  • 这里有一个很好的链接,可以避免图像缓存stackoverflow.com/questions/165253/…
  • 如果图像来自同一个地方,除非您的网络服务器将 Cache-Control 标头与图像一起发送,否则它们绝对应该从浏览器缓存中加载,无论 URL 是什么。您绝对确定它们没有被缓存吗?你是如何测试的?
  • 不确定您所说的“布局”是什么意思,但如果您指的是 HTML,那么当您转到其他 URL 时,它不会被缓存。您对此无能为力。

标签: php javascript html caching browser


【解决方案1】:

除非您将标题设置为no-cache,否则不会重新获取具有固定目录/images/image1.jpg 的图像。它不应该重新下载其他页面上的所有图像。

使用各种工具对此进行测试,例如 Firebug 与 Firefox 或 Safari / Chrome webkit web 开发者跟踪。如果它被缓存或重新下载,它将通知您。

希望这就是你要问的......

【讨论】:

  • firebug 会显示一些图像的加载栏是浅灰色的(我猜这表明图像是从缓存中加载的)............事情是......图像仍然会尝试重新出现(即)在开始时图像占位符上没有任何内容,然后图像开始缓慢出现然后显示,而在我看到的网站中,图像甚至不会尝试重新出现。 ..它就在那里,浏览器只会加载
  • 即使你转到不同的 url 也会有不同的内容....所以感觉你甚至还没有离开页面,因为在同一个地方的所有图像仍然存在在那里,甚至不会尝试重新出现......有没有办法专门完成这个
  • 文件的url有变化吗? (即:相对链接与静态链接?)
  • 图像都在同一个目录中......我正在使用对它们的绝对引用(即我包括域)所以链接都是一样的......并且因为我使用Zend 框架中的 url 会有不同的动作,等等,因此不同的 url 结构
【解决方案2】:

使用标头询问浏览器缓存无济于事

    header("Cache-Control: private, max-age=5400, pre-check=5400");
    header("Pragma: private");
    header("Expires: " . gmdate("D, d M Y H:i:s"). " GMT");

有一个很好的网站可以检查返回的标题http://redbot.org 试试看,它可能会有所帮助,另外还有http://www.mnot.net/cache_docs/,如果你不知道答案,你可能想看看。

【讨论】:

  • 注意我改变了标题(“过期:”。gmdate(“D,d M Y H:i:s”)。“GMT”);因为那个 redbot 发现原来的 Expires 有一个错误:
  • 是的,它仍在尝试重新出现
  • 有时托管公司无法让您设置任意 HTTP 标头。
  • 所以我检查了 rebot 并显示:HTTP/1.1 200 OK Transfer-Encoding: chunked Date: Thu, 17 Mar 2011 21:38:42 GMT Server: LiteSpeed Connection: close X-Powered-作者:PHP/5.2.14 内容类型:text/html; charset=utf-8 设置 Cookie:PHPSESSID=0890f81336d24b802dea66af1f04cc89; path=/ Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre- check=0 Pragma: no-cache Content-编码:gzip 变化:Accept-Encoding
  • 这很奇怪,因为我专门添加了 header("Cache-Control: private, max-age=5400, pre-check=5400"); header("Pragma: private"); header("过期时间:" .gmdate("D, d M Y H:i:s")." GMT");在我的 zend 框架上的 index.php 中
猜你喜欢
  • 2015-02-07
  • 1970-01-01
  • 2010-12-19
  • 2018-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-11
  • 2011-11-12
相关资源
最近更新 更多