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

标签 javascript image http-headers browser-cache

我有一个应用程序可以使用 JavaScript 动态加载图像并将它们绘制到 Canvas 上。图像可以改变,但我也想利用缓存,所以我使用最后修改的 http header 并在图像未修改时发送 304 响应。这一切都很好,似乎正在工作......

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

具有空缓存响应的原始请求具有这些 header :

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_encoded 数据返回,在客户端,我通过将 src 设置为数据来呈现 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*/}
 });

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

关于javascript - 强制浏览器发送图像的http请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10542612/

相关文章:

java - 查找图像中的隐藏文件(视频文件)

java - 平铺背景

cURL 和 etag 的使用?

java - 如何通过 post man post 请求在 header 中传递对象?

javascript - 当我单击注册按钮时,它不会进入注册组件

javascript - 将字符串随机放入二维数组中

c# - 在 Windows Phone 7 中将图像保存到媒体库

java - GET 请求不适用于 Chrome --> net::ERR_CONTENT_LENGTH_MISMATCH

javascript - 当频率动态改变时,使振荡平滑地增加/减少

javascript - 从 dom react 元素改变状态