【问题标题】:Java Servlet Mimetype and Internet Explorer mimetype handling bugJava Servlet Mimetype 和 Internet Explorer mimetype 处理错误
【发布时间】:2009-11-09 22:08:39
【问题描述】:

我有一个可能返回 text/html 或 application/pdf 内容的 servlet。显然,Internet Explorer (IE7) 似乎无法正确处理应用程序/pdf。

例如。 Servlet 输出 A 可能返回 html 内容:

[此处为html内容]

然后Servlet输出B可能会返回PDF内容:

[此处为pdf内容]

与这些输出关联的 URL 是相同的 Servlet URL:http://web/Servlet

在线阅读,看起来 IE 可能有一个错误的机制,并且不信任从服务器设置的 mimetype/content 类型。主要是,我在 Internet Explorer 下遇到问题,我在其中输出 PDF,但由于某种原因,IE 将内容类型恢复为 text/html,我得到一个空白的 html 页面。

以下是关于这个问题的引述:

“现在仍然存在另一个错误,即使 PDF servlet 已修复以将响应的 MIME 类型设置为 application/pdf。如果未找到结果,则响应使用 HTML 将此信息发送回客户端!现在由于 IE 的 MIME 类型恶作剧,响应将使用 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

以上是火狐的输出。在 IE 下,我可能会得到:

Content-Length=0
Connection=Keep-Alive
Content-Type=text/html
Content-Language=en-US

即使代码相同。 这是我的问题,我该如何避免这个问题?

【问题讨论】:

    标签: java internet-explorer servlets mime-types


    【解决方案1】:

    我们在工作中遇到了类似的问题。您可以通过在您访问的 URL 中包含一个具有适当扩展名的文件名来扭转浏览器。

    如果您有一个 HTML 服务 servlet 和一个 PDF 服务,这显然没有问题;只需将不同的 URL 映射到它们。

    如果类型是在运行时确定的,您可以通过默认为 HTML 并在需要时返回带有元重定向到 PDF URL 的文档来解决问题。

    【讨论】:

    • (或者更简单地说:IE 更信任 URL 上的文件扩展名而不是你给它的内容类型。你只需要安排 URL 来匹配你的数据类型)。
    猜你喜欢
    • 2017-07-15
    • 1970-01-01
    • 2015-06-07
    • 2014-01-15
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    • 2013-03-03
    • 2011-07-29
    相关资源
    最近更新 更多