所以我正在建立一个网站,我有一些图像,我通过https://tinypng.com/来缩小尺寸。
其中一张照片就是这张照片:
http://postimg.org/image/jxxbx85xv/
名为map.png。该图像的大小为508KB,这是很多。
优化后,它降至113KB:
http://postimg.org/image/g6xya7csp/
现在最大的问题是,如果我用新版本的113KB覆盖map.png(508KB),我会从firefox获得以下消息:
图像损坏或截断:<图像路径>
它显示的图像不到一半。
我在Chrome中得到类似的东西(没有在IE中测试)。
现在令我困惑的是,如果我将图像名称更改为map2.png(并更新html以指向新图像),图像将显示没有任何问题。
我的问题是:这是浏览器缓存图片的错误吗?除了更改图像的名称和img标签的src之外,还有什么我可以做的吗?
由于
更新
是的,即使经过硬更新(CTRL + F5多次),我仍然会看到这个问题。
在我的本地机器上,我正在使用apache2。我尝试重启apache但是没有解决任何问题。
UPDATE2
我已经确认如果我将图像上传到实时服务器,则不会出现错误。我只在我的本地服务器(ubuntu上的apache2)中看到此问题。我仍然希望我有办法解决这个问题,但只要它在实时服务器上工作,我想我可以忍受这个。
感谢所有帮助人员。
UPDATE3
所以我认为图像在实时服务器上正确显示而不是在我的本地服务器上显得很奇怪。
所以我用Google搜索了一下,似乎这与Apache发送静态内容的方式有关。
所以我将这些添加到我的.htaccess中(之后我会转移到我的虚拟主机配置文件中):
EnableSendfile Off
EnableMMAP Off
现在图像显示正确。
Apache文档链接
http://httpd.apache.org/docs/2.2/mod/core.html#enablesendfile
http://httpd.apache.org/docs/2.2/mod/core.html#enablemmap
再次感谢您的帮助。
答案 0 :(得分:1)
一个简单的解决方案,以防止缓存和加载始终是一个新的图像,是在网址的末尾添加一个非固定的参数:
http://postimg.org/image/g6xya7csp/?3123423
< - Numer不固定并且每次生成
如果您运行此非固定num查询,服务器将查找不同的URL图像,并将提供更新的URL图像。这是一个小技巧,有助于通过缓存的图像并再次阅读新的。
无论如何,Apache可以使用mod_expires在每个.htaccess(在每个目录上)配置不同的规则,并且您可以编辑每种类型对象的过期时间:
<ifModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 1 second"
# ExpiresByType text/html "access plus 1 day"
# ExpiresByType image/gif "access plus 1 day"
# ExpiresByType image/jpeg "access plus 1 day"
# ExpiresByType image/png "access plus 8 hours"
# ExpiresByType text/css "access plus 1 second"
# ExpiresByType text/javascript "access plus 30 days"
# ExpiresByType application/x-javascript "access plus 30 days"
</ifModule>
如您所见,我已对我的Expires进行了评论,以使其不被缓存。 希望你能用这两个技巧解决你的问题。
以下是文档:
https://docs.joyent.com/guides/apache-guide/configuring-mime-types-in-htaccess http://httpd.apache.org/docs/2.2/mod/mod_expires.html