为什么有时我会将图像(或CSS,JS等)发送到FTP,它们不会上传(或缓存)?
#container {
background: url("../images/bg.jpg") no-repeat scroll 0 0 transparent;
height: 895px;
overflow: hidden;
}
但是使用//
(../images//bg.jpg
),我可以看到新图片
#container {
background: url("../images//bg.jpg") no-repeat scroll 0 0 transparent;
height: 895px;
overflow: hidden;
}
答案 0 :(得分:1)
似乎文件已上传,但已被浏览器缓存。
尝试在Firefox / IE中使用CTRL + F5重新加载(其他浏览器可能有不同的快捷方式),您应该始终看到新文件。
资源(JS,CSS和图像文件)以某种方式被浏览器更强烈地缓存。对于HTML页面,每次刷新时通常会有一个新的HTTP请求,对于资源,有时根本不会生成HTTP请求。您可以通过查看例如在Firebug的Net Panel。
缓存通常是一个非常棘手的主题,很大程度上取决于服务器和浏览器的设置和实现。
浏览器缓存通常通过精确的URL匹配来实现。因此,http://someserver/bg.jpg
和http://someserver//bg.jpg
是两个完全不同的网址。但是,许多HTTP服务器将假定您请求了相同的内容,并将发送存储在服务器根文件夹中的bg.jpg文件的内容(您必须看到URL和与此URL链接的内容之间的差异)。
如果您访问了第一个网址,则浏览器会对其进行缓存。然后,在您上传新版本的图像之后,很大程度上取决于缓存的浏览器实现,以及您下载' bg.jpg'时发送的服务器的缓存设置。首次。例如,在带有图像的HTTP响应头中发送的服务器设置可能是,对于下一个说1小时,图像可以由浏览器缓存,并且直接从缓存加载而不询问服务器(服务器设置可能配置为避免不必要的流量的方式)。
(有点hacky,但经常使用)方式总是得到一个新鲜的'该文件的版本是为请求添加当前时间戳(但它通常仅限于服务器端生成或JavaScript脚本) - 在CSS中没有多大意义。
因此,在我编写它时,脚本会询问服务器
http://someserver/bg.jpg?1334442703
但几秒钟后,当我刷新页面时,它将会是
http://someserver/bg.jpg?1334442711
大多数服务器都会丢弃查询字符串('?'之后的字符串),并且只会为两个查询返回bg.jpg
文件的相同内容,但由于图像的URL是不同的是,没有一个浏览器应该从缓存中读取图像。