要使诸如HTTPS上的图像之类的内容被缓存到客户端,我该怎么办?

时间:2020-03-05 18:55:58  来源:igfitidea点击:

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

解决方案

回答

通过HTTPS连接提供的内容永远不会缓存在浏览器中。我们不能对此做太多事情。

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

回答

75张图片听起来很像。如果有很多小图像,则可以通过多种方式将许多图像捆绑为一个,我们可能会发现是否可以找到执行此操作的库。我们也可以强制将图像缓存在类似Google Gears的文件中。

回答

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

回答

如果我们通过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时不会禁用保持活动状态

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

回答

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

因此,请正确设置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>

回答

也许我们可以添加其他服务器/子域来提供不带https的图像?

回答

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

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