PNG图像输出的标题以确保它在浏览器中被缓存?

Posted

技术标签:

【中文标题】PNG图像输出的标题以确保它在浏览器中被缓存?【英文标题】:Headers for PNG image output to make sure it gets cached at browser? 【发布时间】:2011-11-11 13:27:22 【问题描述】:

我有动态生成的图像 (PNG),并将嵌入网站和论坛。当图像发布在非常繁忙的页面上时,会有很多连接来为不经常更改的内容提供服务。我想告诉浏览器缓存多长时间。

那么我需要什么标题?目前,我有:

Cache-Control: max-age=86400
Content-Type: image/png

浏览器似乎没有缓存图像(大约 20-30kb)。还需要什么?

编辑: 这是一个示例图像,我已经有一个带有 .png 扩展名的 URL: https://images.carspending.com/sigimg/5734/user/honda-accord-2-4i-executive-tourer_medium.png

【问题讨论】:

如果你有一个看起来像图片的 URL 肯定会让浏览器更容易(例如:http://www.example.com/images/myimage.png 而不是http://www.example.com/my_script.php?image=93895 我已经这样做了,已编辑帖子。 【参考方案1】:

最后起作用的是:

header('Pragma: public');
header('Cache-Control: max-age=86400');
header('Expires: '. gmdate('D, d M Y H:i:s \G\M\T', time() + 86400));
header('Content-Type: image/png');

现在浏览器在加载带有嵌入的页面时不会请求图像。

【讨论】:

你能解释一下为什么这回答了这个问题吗? 在回答时(6 年前)确实解决了问题。如果将包含所有这些标头的 png 资源加载到外部页面上,它将被正确缓存。它不适合你吗? 它对我不起作用,我使用的是 Google Chrome 71,并且这些标头仅在 png 位于浏览器会话中时才有效,一旦 Crome 重新启动,它就会再次从 Internet 加载图像。我也试过Cache-control: immutable, public, max-age..., stale-while-revalidate...access-control-allow-origintiming-allow-origin,似乎没有任何效果......【参考方案2】:

确保你也这样添加 public:

header('Cache-Control: max-age=86400, public');

Read this also,很有帮助。

【讨论】:

正确的是:header('Pragma: public'); header('Cache-Control: max-age=86400');买你给我的主意 @Veseliq:我很高兴。我不是 PHP 开发人员,所以我做了一个疯狂的猜测;)您将过期日期设置为 GMT 格式很好;否则,它也不会起作用。【参考方案3】:

Expires 标头应该会有所帮助。

header('Expires: '. gmdate('D, d M Y H:i:s \G\M\T', time() + 86400));

【讨论】:

以上是关于PNG图像输出的标题以确保它在浏览器中被缓存?的主要内容,如果未能解决你的问题,请参考以下文章

确保浏览器一次显示所有内容

如何使用 PHP 让浏览器缓存图像?

如何强制浏览器重新缓存图像[重复]

CORS 标头在浏览器中被更改,导致内容被阻止

新的浏览器缓存策略变更:舍弃性能确保安全

http缓存js,css和图像