6

我使用 Tomcat 作为服务器,使用 Internet Explorer 6 作为浏览器。我们应用程序中的一个网页大约有 75 张图片。我们正在使用 SSL。加载所有内容似乎很慢。如何配置 Tomcat 以便 IE 缓存图像?

4

7 回答 7

10

如果您通过 https 提供页面,那么您需要通过 https(来自同一域或另一个域,也通过 https)提供所有包含的静态或动态资源,以避免浏览器中出现安全警告。

大多数浏览器默认不会将通过安全通道传递的内容写入磁盘,因此存在于浏览器内存缓存中,该缓存比磁盘缓存小得多。当应用程序退出时,此缓存也会消失。

说了这么多,您可以做一些事情来提高单个浏览器设置中 SSL 资产的可缓存性。对于初学者,请确保您的所有资产都具有合理的 Expires 和 Cache-Control 标头。如果 tomcat 位于 apache 后面,则使用 mod_expires 添加它们。这将避免浏览器必须检查图像是否在页面之间发生了变化

<Location /images>
   FileEtag none
   ExpiresActive on
   ExpiresDefault "access plus 1 month"
</Location>

其次,这是特定于 MSIE 和 Apache 的,大多数 apache ssl 配置都包含这些行

SetEnvIf User-Agent ".*MSIE.*" \
     nokeepalive ssl-unclean-shutdown \
     downgrade-1.0 force-response-1.0

这会禁用所有 MSIE 代理的 keepalive。恕我直言,这太保守了,最后一个使用 SSL 出现问题的 MSIE 浏览器是 5.x 和 6.0 pre SP2 的未修补版本,现在这两个版本都非常少见。以下更宽松,在使用 MSIE 和 SSL 时不会禁用 keepalives

BrowserMatch "MSIE [1-4]" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
BrowserMatch "MSIE [5-9]" ssl-unclean-shutdown
于 2008-09-17T13:28:58.353 回答
5

一些浏览器会缓存 SSL 内容。默认情况下,Firefox 2.0+ 不会在光盘上缓存 SSL 资源(为了增加隐私)。除非出现 Cache-control:public 标头,否则 Firefox 3+ 不会将它们缓存在磁盘上。

因此正确设置 Expires: 标头和 Cache-control:public。例如

<Files ~ "\.(gif|jpe?g|png|ico|css|js|cab|jar|swf)$">
        # Expire these things
        # Three days after access time
        ExpiresDefault  "now plus 3 days"
        # This makes Firefox 3 cache images over SSL
        Header set Cache-Control public
</Files>
于 2008-09-17T14:53:38.133 回答
4

如果这 75 个图像中有很多是出现在每个页面上的图标或图像,您可以使用 CSS sprite 来大幅减少 HTTP 请求的数量,从而更快地加载页面:

http://www.alistapart.com/articles/sprites/

于 2009-04-08T18:19:02.263 回答
2

75张图片听起来很多。如果是很多小图像,有很多方法可以将许多图像捆绑为一个,你可能会看看你是否能找到一个这样做的库。您也可以强制将图像缓存在google gears之类的东西中。

于 2008-09-16T13:59:19.380 回答
-1

通过 HTTPS 连接提供的内容永远不会缓存在浏览器中。您对此无能为力。

通常,您网站中的图像不是很敏感,因此通过 HTTP 提供服务。

于 2008-09-16T13:50:10.073 回答
-1

第一个答案是正确的,使用 HTTPS 时没有缓存任何内容。但是,当您构建您的网页时,您可能会考虑通过它们各自的 URL 来引用图像。通过这种方式,您可以将图像指定为源自 HTTP 源,并且它们(可能)会被浏览器缓存。

于 2008-09-16T16:26:31.553 回答
-1

也许您可以添加一个额外的服务器/子域来提供没有 https 的图像?

于 2008-09-17T16:52:29.003 回答