【问题标题】:IE6 Not caching my imagesIE6 不缓存我的图片
【发布时间】:2023-03-18 02:40:01
【问题描述】:

我已经在生产 Tomcat Web 服务器中上传了我的 Web 应用程序。
我正在尝试对其进行测试,它在 FF/IE7/IE8 上运行良好,但我遇到了问题 在 IE6 上显示。

我在状态栏中注意到 IE6 似乎不时下载图像。 即使我没有点击任何东西,它仍然会下载图像。

我正在使用一个使用图像的菜单,但它在 IE6 上显示效果不佳。问题是我的目标用户中有 60% 在此浏览器上运行。

我开始认为这是浏览器缓存问题。在我所有的 JSP 中,我将所有 head 部分的元标记放在下面。 我这样做是因为我的应用严重依赖 Ajax,并且我需要我的网络资源的最新副本。

<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="Expires" content="Sat, 01 Dec 2001 00:00:00 GMT">
</head>

这可能是罪魁祸首吗?有什么解决方法吗?如何强制 IE6 缓存这些图像?谢谢。

我不确定这是否是您正在寻找的东西,但如果我遗漏了什么,请告知。

这是正在下载的图像的示例。我忘了说这个应用程序只能在我们本地的 Intranet 网站上运行。

@Pekka,这就是你要找的东西吗?

Response Headers
Server  Apache-Coyote/1.1
Etag    W/"1957-1275442082000"
Date    Mon, 18 Oct 2010 11:37:00 GMT

Request Headers
Host    atpapps03:9090
User-Agent  Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10 ( .NET CLR 3.5.30729)
Accept  image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language en-us,en;q=0.5
Accept-Encoding gzip,deflate
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive  115
Connection  keep-alive
Referer http://atpapps03:9090/rts/css/menu.css
Cookie  JSESSIONID=0DD210EE0B2788A7774B10D477734DA9
If-Modified-Since   Wed, 02 Jun 2010 01:28:02 GMT
If-None-Match   W/"1957-1275442082000"
Cache-Control   max-age=0

【问题讨论】:

  • 请用Firebug获取图片资源的响应头,尤其是缓存相关的,也贴在这里
  • 如果你的 60% 使用在 IE6 上运行,你应该在 IE6 上完成你的开发(你现在已经面对痛苦,你选择在另一个浏览器上开发来避免这种痛苦)
  • @Ian 你在说什么?这是一个缓存问题,而不是 HTML 显示问题
  • @Ian 我只使用 firefox 开发我的应用程序。然后我检查一切是否按预期工作。当我用 IE6 测试它时,我遇到了很多浏览器显示问题。但是感谢 IE6 条件黑客,我能够修复它们,并且它们现在在 FF/IE6/IE7/IE8 中看起来都一样。我的问题实际上是图像在 IE6 中的加载速度没有那么快,并且每次都会下载图像。
  • @Pekka,超过一半的用户在 IE6 中仍然存在问题。所以我认为最好的风险控制总是来自于在你的许多用户拥有的最低浏览器上开发。

标签: internet-explorer jsp xhtml internet-explorer-6 browser-cache


【解决方案1】:

在我所有的 JSP 中,我将所有 head 部分的元标记放在下面。我这样做是因为我的应用严重依赖 Ajax,并且我需要我的网络资源的最新副本。

有两个问题:

  1. 网页浏览器会忽略元标记。将此信息放在响应标头中。

  2. 即使没有被忽略,元规则也只适用于 JSP 的 HTML 输出,因此适用于所有链接资源(img、js、css 等)在 HTML 输出中。它们在各自的响应标头中都有各自的规则。

最好的办法是使用Filter,它会在静态内容的未来日期添加Expires 标头。

private static final long DEFAULT_EXPIRE_TIME = 604800000L; // ..ms = 1 week.

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
    final long twoWeeksAhead = System.currentTimeMillis() + DEFAULT_EXPIRE_TIME;
    ((HttpServletResponse) response).setDateHeader("Expires", twoWeeksAhead);
    chain.doFilter(request, response);
}

将此过滤器映射到 web.xml 上的 url-pattern 覆盖感兴趣的 URL,例如/images/*.

【讨论】:

  • 谢谢。现在过期的 YSLOW 等级是 A,我现在在 IE6 中看到了相当大的加载时间速度。谢谢谢谢!
  • 一方面,您知道为什么只有 IE6 会表现出这种行为吗?为什么 IE7/IE8/FF 做得很好..
【解决方案2】:

参见例如this question 关于如何控制静态文件类型的缓存设置。

【讨论】:

  • @Pekka 我在上面发布了来自 Jquery UI 图像的图像文件示例。这是你在找的吗?
  • @Mark 是的。您需要更改缓存的服务器端设置
  • @Pekka。谢谢。我会检查一下,虽然老实说我还不知道如何做到这一点。我会寻求建议,因为我还是 Spring MVC 的初学者
  • 您可能忽略了他的“Cache-Control”标头在请求中,而不是响应中。那是因为他在进行网络捕获时刷新了此页面。但是一般的建议是正确的——你需要在这张图片上设置一个新鲜的生命周期。见fiddler2.com/redir/?id=httpperf
  • @BalusC @Eric (facepalm) 当然。我一定是睡着了。干杯,我会删除那个位
【解决方案3】:

Pekka is correct,它可能是缓存控制。 解决此问题的一种方法是从具有不同缓存标头集的不同子域加载图像。如果您使用 CDN 提供商,他们会为您设置缓存控制。

太糟糕了!在 IE 7-8-9 上测试它。很少有人用IE6 如果它是一个内网应用程序,快速修复将是 Chrome 框架,检测它,如果它没有安装,则重定向到下载页面。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    • 2018-02-09
    • 2017-08-07
    • 2011-11-02
    • 2014-01-23
    • 2017-03-25
    • 2018-03-15
    相关资源
    最近更新 更多