神秘内容处置标题的案例



我们的产品包括一个由SWFObject加载的Flash应用程序。对于一个客户,当通过HTTPS(但不是HTTP(访问此SWF时,Flash Player不会加载它。

我让客户直接转到SWF文件的URL(而不是包装页(:

  • 当他通过HTTP这样做时,SWF会加载到浏览器中
  • 当他通过HTTPS这样做时,IE7会向他显示一个"保存文件"对话框。这意味着响应中存在"内容处置:附件"标头。这也解释了为什么SWF没有加载到Flash Player中:作为一种安全措施,它不会播放带有该标头的SWF

所以,我有几件事想弄清楚:

  1. 我如何确定服务器正在发送Content-Disposition标头(而不是IE7的奇怪工件(?用户只能使用IE7,不能使用Firefox、Chrome等。IE7不包括IE9开发工具中方便的"网络"选项卡。

  2. 假设标头存在,它是如何到达那里的?他们正在运行Tomcat6。SWF由Tomcat的默认servlet提供服务。如果使用HTTPS连接器,则会显示标头,但如果使用HTTP连接器,则不会显示标头。除了启用HTTPS连接器之外,Tomcat配置是库存配置。

顺便说一句,我不相信Flash的缓存清除。在我的IE9下的机器上,即使我明确清除了浏览器缓存和Flash Player存储的数据,SWF也经常被缓存所满足:我在Fiddler或Tomcat的访问日志中没有看到任何对它的请求,但SWF在浏览器中加载。我是不是遗漏了什么?客户可能正在访问一些伪造的SWF缓存版本吗

编辑:显然,开发人员工具中的"清除缓存"命令并没有真正清除缓存。使用标准方法产生了预期的结果。

Edit 2:Tomcat中的跟踪表示未设置Content-Disposition标头。我不确定浏览器是否没有收到它,但AFAIK浏览器正在直接连接到Tomcat。这似乎是一种奇怪的浏览器端行为。

问题与响应中存在以下标头有关:

Cache-Control: no-cache
Pragma: no-cache

Tomcat发送这些邮件是因为页面受到安全约束(在conf/web.xml中配置(的保护。这些邮件头导致IE7的行为就像存在"Content-Disposition: attachment"邮件头一样。

我的解决方案是让客户将以下配置添加到Tomcat的conf/context.xml中:

<Valve className="org.apache.catalina.authenticator.BasicAuthenticator" securePagesWithPragma="false" />

这将标题替换为:

Cache-Control: private

这仍然应该实现在解决IE问题的同时防止代理缓存页面的目标。这是基于这里找到的解决方案:

http://daveharris.wordpress.com/2007/07/09/how-to-configure-cache-control-in-tomcat/

然而,这个非常相似的解决方案完全抑制了标头。这些属性的详细信息可以在Tomcat文档中找到:

http://tomcat.apache.org/tomcat-6.0-doc/config/valve.html#Basic_Authenticator_Valve/Attributes

您应该能够在加密之前在服务器端记录传出的HTTP响应,使用null密码,或者向wireshark提供RSA密钥,并查看数据包捕获中的标头。

相关内容

  • 没有找到相关文章

最新更新