0

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

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

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

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

<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
4

3 回答 3

2

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

有两个问题:

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

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

您最好的选择是使用 a在静态内容的遥远日期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/*.

于 2010-10-18T14:19:02.353 回答
1

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

于 2010-10-18T11:42:33.010 回答
-1

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

即糟透了!在 IE 7-8-9 上测试它。如果它是一个 Intranet 应用程序,则很少使用 IE6,快速修复将是 Chrome 框架,检测它,如果它未安装,则重定向到下载页面。

于 2010-10-18T11:46:52.923 回答