我们的产品包括一个由 SWFObject 加载的 Flash 应用程序。对于一位客户,当通过 HTTPS(但不是 HTTP)访问此 SWF 时,Flash Player 不会加载它。
我要求客户直接转到 SWF 文件的 URL(而不是包装页):
- 当他通过 HTTP 执行此操作时,SWF 会加载到浏览器中。
- 当他通过 HTTPS 执行此操作时,IE7 会向他显示一个“保存文件”对话框。这意味着响应中存在“Content-Disposition:附件”标头。这也可以解释为什么 SWF 没有在 Flash Player 中加载:作为一种安全措施,它不会播放带有该标头的 SWF。
所以,我有几件事要弄清楚:
如何确定服务器正在发送 Content-Disposition 标头(而不是 IE7 的奇怪工件)?用户只能使用 IE7,不能使用 Firefox、Chrome 等。IE7 不包括 IE9 开发人员工具中提供的方便的“网络”选项卡。
假设标题存在,它是如何到达那里的?他们正在运行 Tomcat 6。SWF 由 Tomcat 的默认 servlet 提供服务。如果使用 HTTPS 连接器,则标头似乎存在,但如果使用 HTTP 连接器,则不存在。除了启用 HTTPS 连接器之外,Tomcat 配置是库存的。
在旁注中,我不相信 Flash 的缓存清除。在我的 IE9 下的机器上,即使在我明确清除浏览器缓存和 Flash Player 存储的数据后,缓存也经常满足 SWF:我在 Fiddler 或 Tomcat 的访问日志中没有看到任何请求,但 SWF 加载浏览器。我在这里错过了什么吗?客户是否正在访问某些伪造的 SWF 缓存版本?
编辑:显然开发人员工具中的“清除缓存”命令并没有真正清除缓存。使用标准方法产生了预期的结果。
编辑 2:在 Tomcat 中进行跟踪表明未设置 Content-Disposition 标头。我不确定浏览器是否没有收到它,但是AFAIK浏览器直接连接到Tomcat。这似乎是一种奇怪的浏览器端行为。