我有一个可以返回text / html或application / pdf内容的servlet。显然,看起来Internet Explorer(IE7)无法正确处理application / pdf。
例如。 Servlet输出A可能返回html内容:
[html content here]
然后Servlet输出B可能会返回PDF内容:
[pdf content here]
与这些输出关联的URL与Servlet URL相同:http://web/Servlet
在线阅读,看起来IE可能有一个错误的机制,并且不信任从服务器设置的mimetype / content类型。主要是,我在Internet Explorer下遇到问题,我输出PDF但由于某种原因,IE将内容类型恢复为text / html,我得到一个空白的html页面。
以下是该问题的引用:
“现在还有另一个bug,即使修复了PDF servlet,将响应的MIME类型设置为application / pdf。如果没有找到结果,则响应使用HTML将此信息发送回客户端!现在由于IE的MIME类型shenanigans,响应将使用text / html MIME类型显示。但是大多数其他浏览器将信任从服务器发送的application / pdf MIME类型“
在具有相同Servlet的Firefox中,我没有遇到这个问题。
在java代码中,我基本上设置了这些响应头值:
Expires=0
Cache-Control=max-age=1, must-revalidate, no-cache, post-check=0, pre-check=0
Pragma=public
Content-Disposition=inline; filename=filename_1257804404940.pdf
Content-Length=457834
Connection=Keep-Alive
Content-Type=application/pdf
Content-Language=en-US
以上是firefox的输出。在IE下,我可能会得到:
Content-Length=0
Connection=Keep-Alive
Content-Type=text/html
Content-Language=en-US
即使代码是相同的。 这是我的问题,我该如何避免这个问题?
答案 0 :(得分:3)
我们在工作中遇到过类似的问题。您可以通过在您要访问的URL中包含具有适当扩展名的文件名来扭曲浏览器的手臂。
如果你有一个HTML服务servlet和一个执行PDF的服务,这显然没有问题;只需将不同的网址映射到它们。
如果在运行时确定类型,则可以通过默认为HTML来解决问题,并在需要时将带有元重定向的文档返回到PDF URL。