强制浏览器刷新缓存,etaged图片

在我的网站的用户生成的图像供应增长给他们一个src是这样的:

userImage.ashx?id={UserId}&type=avatar

从响应ashx文件,我设置了ETag头。 当用户上传一个新的形象,ETAG变化。

如果浏览器与缓存ETAG的文件,应发送与服务器的请求If-None-Match标题设置为ETAG每当需要显示该文件。 如果缓存的etag是一样的服务器上的当前的etag,服务器响应Not Modified - 304如果ETAG不同的是,服务器响应。 OK - 200和开始发送新的文件。

这是应该如何在理论上工作。 不过,我已经发现,某些浏览器(Firefox和IE,未经测试别人),这是情况并非如此。 如果用户导航到具有缓存,etagged图像的新页,这些浏览器只需使用图像他们的缓存未做要求。 如果用户再刷新页面,浏览器发送的请求If-None-Match标头集合。

所以我的问题是这样的:用户更新自己的形象之一,然后导航到显示图像的页面。 直到用户按下refresh ,缓存图像将显示,尽管它有不同的etag的新形象。 当用户按下刷新,浏览器不会用的请求If-None-Match标头集,这触发服务器发送的新形象。

是否有可能解决这一问题?

例如200响应头:

Status=OK - 200 Date=Thu, 27 Oct 2011 14:37:31 GMT Server=Microsoft-IIS/6.0 X-Powered-By=ASP.NET X-AspNet-Version=4.0.30319 Transfer-Encoding=chunked Cache-Control=public, max-age=86400 Etag="27/10/2011 13:23:30" Content-Type=image/jpg

示例304头:

Status=Not Modified - 304 Connection=close Date=Thu, 27 Oct 2011 14:39:12 GMT Server=Microsoft-IIS/6.0 X-Powered-By=ASP.NET X-AspNet-Version=4.0.30319 Cache-Control=public, max-age=86400

(使用上次modfied日期ETAG作为其关于压缩等更适应供以后需要)

--------------解决方案-------------

IIRC你可以设置一个文件是有效多久通过“过期”标题。 所以,如果你说“这个文件是有效的,未来两天”,浏览器也没有理由与您的服务器。

在你的例子给出最大年龄做同样的事情,基本上是这样。

我解决了这个问题,如下所示:

有一个服务器端的服务,始终重定向(302暂时移动),以要显示的图像,用户侧有图像源重置为重定向+'?“ +时间戳。

这迫使浏览器再次查询图像,但让缓存的工作。

所以,如你的用户端JavaScript请求/redirectme/avatar-xxx.jpg?121341并得到一个302/avatars/avatar-xxx.jpg它,然后通常与Etag的缓存请求。 你付出两个往返,以换取不必每次都送的整体形象。

在Chrome 19(不需要时间戳查询字符串)和Firefox 10进行测试(确实需要时间戳)。

分类:高速缓存 时间:2015-03-15 人气:0
本文关键词: 浏览器,缓存,HTTP头
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.722 (s). 10 q(s)