我必须做些什么才能使通过HTTPS提供的图像等内容在客户端缓存?

时间:2008-09-16 13:44:51

标签: performance tomcat ssl https

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

7 个答案:

答案 0 :(得分: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 SP2的未修补版本,现在两者都非常罕见。以下是更宽松的,并且在使用MSIE和SSL时不会禁用keepalive

BrowserMatch "MSIE [1-4]" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
BrowserMatch "MSIE [5-9]" ssl-unclean-shutdown

答案 1 :(得分:5)

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

因此,正确设置Expires:标头,并设置Cache-control:public。 e.g。

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

答案 2 :(得分:4)

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

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

答案 3 :(得分:2)

75张图片听起来很多。如果它是很多小图像,有很多方法可以将许多图像捆绑在一起,您可能会看到是否可以找到一个可以执行此操作的库。您也可以强制将图像缓存为google gears

答案 4 :(得分:-1)

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

通常,您网站中的图片不是非常敏感,并且出于这个原因通过HTTP提供服务。

答案 5 :(得分:-1)

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

答案 6 :(得分:-1)

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