【发布时间】:2013-09-30 20:57:50
【问题描述】:
我在我的页面上动态创建图像,并告诉浏览器缓存图像,这很有效。但是当我按 F5 刷新页面时,图像会重新加载,他们不应该这样做。这是我正在使用的 HTML:
<img width="240" height="240"
src="/user-data/images/image.php?id=2&file=1234567890&height=240&width=240" />
这里是 PHP 标头部分:
header("Cache-Control: private, max-age=172800, pre-check=172800");
header("Pragma: private");
// Set to expire in 2 days
header("Expires: " . date(DATE_RFC822, strtotime(" 2 days")));
if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])){
// if the browser has a cached version of this image, send 304
header('Last-Modified: ' . $_SERVER['HTTP_IF_MODIFIED_SINCE'], true, 304);
exit;
}
那么,当有人按下 F5 时,这是我可以控制的吗?我的标题中是否缺少某些内容?
【问题讨论】:
-
您是担心图像重新加载(带宽问题)还是脚本再次生成相同图像(服务器负载问题)?
-
如果您按 F5,我知道有些浏览器倾向于再次检索所有内容,而不管缓存标头如何。但是,如果您使用超链接四处浏览(甚至离开页面并再次返回),浏览器会正确使用缓存。在您尝试解决可能不存在的问题之前可能值得检查:)
-
我只是不喜欢加载图像需要一段时间。什么时候应该被缓存。
-
我确实发现
HTTP_IF_MODIFIED_SINCE没有被设置。 -
我做了一件事,将图像质量从 100 降低到 75,这确实加快了速度!
标签: php http-headers