XMLHttpRequest:显式启用浏览器缓存(二进制数据)

XMLHttpRequest: Explicitly ENABLE browser-caching (binary data)

本文关键字:二进制 数据 缓存 浏览器 启用 XMLHttpRequest      更新时间:2023-09-26

Prelude

My Web-Application (关键字: HTML, JavaScript, jQuery;必须在IE8+,Chrome,FF)中工作,必须呈现来自WebCam的实时图像数据。该"网络摄像头"集成了一个网络服务器,BMP提供实时图像数据。

图像数据通过设置img标签的src属性"下载"。

问题

我想在客户端分析图像数据。为此,我想使用 XMLHttpRequest 预下载图像(使用此提供的 stackoverflow 答案),然后更新 img 标签的 src 属性。我的理解是,浏览器应该使用通过XMLHttpRequest下载的缓存图像数据。

问题是,浏览器(IE8+,FF和Chrome)向服务器发出另一个请求以再次下载图像(即它不使用缓存的数据或数据首先没有缓存)。

如何使浏览器能够缓存数据并使用它,而不是发出另一个请求?

附录

服务器会发送适用于 ChromeCache-Control: max-age=5, public和所有其他浏览器的Cache-Control: no-store, max-age=5

Chrome中,我能够通过发送304 Not Modified来处理第二个请求。然后,浏览器将使用缓存的图像。在所有其他(提到的)浏览器中,这不起作用。


更新 1

我知道,我可以使用数据 URI 方案来更新 src 属性。但是,这不适用于IE8(请参阅上面的要求),因为IE8仅支持最大32KB的此类内容。

我通过执行显而易见的操作解决了该问题:

  1. 首先通过隐藏img(通过设置src)请求图像。这样,图像就会被浏览器缓存。

  2. 之后通过 AJAX 请求映像二进制数据。由于浏览器随后使用上述缓存数据,因此我可以分析图像数据,而无需发出另一个请求。

  3. 更新"可见"图像的src

这样我就可以实现我所需要的:查看具有先前数据分析的"实时"图像,而必须两次请求图像。