Javascript 强制浏览器发送图像的http请求

Javascript 强制浏览器发送图像的http请求,javascript,image,http-headers,browser-cache,Javascript,Image,Http Headers,Browser Cache,我有一个应用程序,可以用JavaScript动态加载图像并将它们绘制到画布上。图像可以更改,但我也希望利用缓存,因此我使用上次修改的http头,并在未修改图像时发送304响应。这一切都很好,似乎正在发挥作用 但是有一件奇怪的事情正在发生(到目前为止只在OSX上的Chrome和Safari中进行了测试),浏览器偶尔会忽略发送图像请求!在脚本中,我创建了一个newimage(),并启动了onload函数,但当我使用网络检查器时,从未发出请求。我还可以在服务器端确认没有收到请求 具有空缓存响应的原始请

我有一个应用程序,可以用JavaScript动态加载图像并将它们绘制到画布上。图像可以更改,但我也希望利用缓存,因此我使用上次修改的http头,并在未修改图像时发送304响应。这一切都很好,似乎正在发挥作用

但是有一件奇怪的事情正在发生(到目前为止只在OSX上的Chrome和Safari中进行了测试),浏览器偶尔会忽略发送图像请求!在脚本中,我创建了一个
newimage()
,并启动了
onload
函数,但当我使用网络检查器时,从未发出请求。我还可以在服务器端确认没有收到请求

具有空缓存响应的原始请求具有以下标头:

Connection:keep-alive
Content-Length:25937
Content-Type:image/png
ETag:Thu, 10 May 2012 20:48:13 GMT
Last-Modified:Thu, 10 May 2012 20:48:13 GMT

浏览器不应该每次都对此图像发出新的请求,因为它具有上次修改的标题吗?当我运行测试时,浏览器似乎每分钟左右只发出一个新请求(无论我尝试加载同一图像的多少副本)。。。这是预期的行为吗?是否有一些标题组合会强制浏览器在每次修改图像时进行检查?或者是一些JavaScript魔术可以解决这个问题?

我不知道你是否找到了解决问题的方法,但我一直在努力解决同样的问题,我想我现在找到了解决方法。我所做的是使用ajax调用发出请求,而不是将图像作为image/jpeg类型的文件返回,而是将数据作为base64_编码的数据返回,在客户端,我通过将src设置为数据uri来呈现img。使用jQuery,它看起来有点像这样:

jQuery.ajax({
    url: imageURL,
    headers: {'Max-Age':0},
    success: function(d){
                jQuery(imgElement).attr('src','data:image/jpeg;base64,'+d);
             },
    error: function(){/*handle error*/},
    complete: function(){/* handle complete*/}
 });

这对我有用。我希望这对您有所帮助。

您用什么来提出请求?如果在某个超时时间内看到对相同URI的请求,则这可能是您用于发出请求的方法或库的特定内容。@ZachB我没有使用任何库。我在做纯JS,即
var img=new Image();img.onload=函数(){/*…*/};img.src=“someimage.png”嗯,这似乎不适合我。您在服务器端发送哪些头文件?