浏览器GET请求返回旧图像

时间:2013-05-15 13:36:03

标签: javascript jquery html image tomcat

我正在尝试使用GET请求从服务器检索图像。图像不断变化,所以我想每秒抓取几次图像(目的是显示图像并最终模仿视频)。但是,GET请求出了问题。无论我尝试获取图像的速度有多快(每1秒,100毫秒等尝试一次),它每5秒钟只返回一个新图像。它的行为就像在某处有一个缓存的图像,它只是每隔5秒更新一次缓存,并在其他时间返回旧的,重复的图像。

我已经做了以下尝试来解决问题:

  • 验证服务器端的图像实际上每100毫秒左右更新一次,这意味着网页确实会为大多数GET请求返回旧图像,
  • 通过开发者选项以及以隐身模式运行网页,关闭浏览器缓存。这是Chrome的方式。
  • 通过在配置文件中设置maxKeepAliveRequests = 1(禁用)来关闭Tomcat服务器中的keepalive。

然而它仍然只是每5秒检索一次新图像。

Example Request Headers:
  Cache-Control: no-cache
  Connection: keep-alive     <-- Could this be the problem? 
  Pragma: no-cache

Example Response Headers:
  Cache-Control: no-cache
  Cache-Control: no-store
  Connection: close
  Pragma: no-cache
  Server: Apache-Coyote/1.1

我的查询(每次加载图片后延迟执行):

document.getElementById("videoDisplay").src = filename + "?random="+(new Date()).getTime();

4 个答案:

答案 0 :(得分:2)

http://tomcat.apache.org/tomcat-5.5-doc/config/context.html找到此信息 请阅读此条目..

cacheTTL

缓存条目重新验证之间的时间量(以毫秒为单位)。如果未指定,则默认值为5000(5秒)。

可能这是您问题的根源

答案 1 :(得分:0)

想一想:

假设您将间隔设置为500毫秒。

您的服务器需要1秒才能接听请求。

因此,在等待第一个请求时,超时函数在同一个对象上发出另一个请求。

这通常会停止第一个请求。

第二个仍然没有,所以什么都不会改变。

等等。

经过一段时间后,这会“退回”,并且你会得到任意图像。

那么,您服务器的响应时间是多少?

如果服务器速度变慢,则对同一对象的更新速度无关紧要。

您可能在加载时对图像有一些锁定,以防止发出请求而无需等待它们完成?

答案 2 :(得分:0)

两个建议:

  • 添加Expires:标头,将其设置为几秒钟
  • 使用POST请求获取您的数据。获取它意味着检索可能多次获取的内容。 POST是我的设计意为“仅限此次”

答案 3 :(得分:0)

我试图做一次类似的事情,说实话,图像不应该是视频。速度限制为五秒,所以你不要过度使用服务器和DDOS(至少这是我认为的,但不是很确定)。您可以使用HTML5标记流式传输视频。您可能会考虑我的好朋友Google向我展示的这些网站 This is one
Try this one too