我将Tomcat用作服务器,将Internet Explorer 6用作浏览器。我们的应用程序中的网页有大约75个图像。我们正在使用SSL。加载所有内容似乎非常缓慢。我如何配置Tomcat以便IE缓存图像?必须做些什么来使通过HTTPS提供的图像等内容成为缓存的客户端?
回答
如果您通过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 CONFIGS包括这些线路
SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
它禁用保活适用于所有MSIE代理商。恕我直言,这太过于保守了,使用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
通过HTTPS连接提供的内容永远不会在浏览器中缓存。你不能做太多的事情。
通常情况下,您的网站上的图像不是非常敏感,并且由于这个原因通过HTTP提供服务。
75张图像听起来很多。如果是很多小图像,可以将许多图像捆绑为一个,您可能会看到是否可以找到能够实现这一点的库。您也可以强制将图像缓存在google gears之类的内容中。
第一个答案是正确的,使用HTTPS时不会缓存任何内容。但是,当您构建网页时,您可能会考虑通过各自的URL引用图像。通过这种方式,您可以将图像指定为源自HTTP源的图像,并且它们(很可能)会被浏览器缓存。
某些浏览器会缓存SSL内容。 Firefox 2.0+默认不会在磁盘上缓存SSL资源(为了增加隐私)。除非出现Cache-control:public header,否则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>
也许你可以添加一个额外的服务器/子域提供的图像没有HTTPS?
如果很多这些75个的图像是出现在每个页面上的图标或图像,你可以使用CSS精灵大幅减少HTTP请求的数量,从而加载页面速度快:
- 1. Javascript/Express - 为客户端提供图像
- 2. 客户端图像缓存
- 3. 为什么我的Web服务器提供的图像不能在客户端上缓存?
- 4. 必须提供源或客户
- 5. 客户端缓存表单内容
- 6. 在https上阻止了有角templateUrl“此请求已被阻止;内容必须通过HTTPS提供。”
- 7. 为什么必须指定成员资格提供
- 8. ASP.Net客户端图像缓存
- 9. TDataset的某些内部方法必须做什么?
- 10. Oracle与客户端:我必须为客户端安装Oracle?
- 11. 为了使用Glib :: wrap,必须要做些什么Glib :: init()
- 12. 为什么我必须添加这些内存语句?
- 13. 启用 “动态” 的内容客户端缓存(asp.net的MVC 3.0)
- 14. 为什么我们必须提供boost :: get的参数类型?
- 15. 为什么Icecast2不想通过https提供流?
- 16. 由servlet提供的缓存图像
- 17. MVC客户端缓存的静态内容不工作
- 18. 为什么我必须在客户端库中公开宏实现的'use'?
- 19. 可能允许客户端通过https上传到S3并为该存储分区提供CNAME别名?
- 20. K9邮件客户端是否提供了一种通过广播意图获取邮件内容的方式?
- 21. 为什么我的简单的lidgren客户端使用这么多的内存?
- 22. 如何配置Bailador通过TLS(HTTPS)提供内容?
- 23. 我是否必须为iOS 8启动图像提供LaunchScreen.xib?
- 24. 查看边框颜色:为什么我必须通过'图层'
- 25. 通过脚本提供的缓存映像
- 26. Google云端平台存储分区:通过https为自定义域提供内容
- 27. 为什么Mysql Server通过Listen Socket与客户端通信?
- 28. Rails - Stripe :: InvalidRequestError(必须提供源代码或客户。)
- 29. Rails - Stripe :: InvalidRequestError,必须提供源或客户
- 30. 条纹:: InvalidRequestError必须提供源或客户