【问题标题】:Edge won't display pdf over httpsEdge 不会通过 https 显示 pdf
【发布时间】:2025-12-08 13:00:01
【问题描述】:

我有一个旧的 web 应用程序,其 apache webserver 面向 weblogic 服务器。用户使用客户端证书和密码进行身份验证,然后可以通过 jsp 页面和 https 访问 pdf 文件。在当前浏览器中重新测试应用程序时,我发现 pdf:s 不会在 Edge 中显示。

我试图去除不相关的代码。请注意,用户在到达edge_bug.jsp 之前已使用 SSL 证书登录:

<%@ page %>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html"/>
        <title>edge_bug.jsp</title>
    </head>
    <body>
        <a href="javascript:void(0)" onclick="window.open('testpdf.pdf', 'PDFWin' + new Date().getTime(), 'scrollbars=yes,status=yes,width=370,height=550,resizable=yes')">Open in new window</a>
        <a href="testpdf.pdf" >Open in the same window</a>
   </body>
</html>

链接在 IE 和 FireFox 中工作正常,并且显示 pdf,但在 Edge 中显示一个空白的灰色窗口。

如果我将页面嵌入框架集中(旧的东西,但应用程序很旧!)然后在同一窗口中打开 pdf 的链接开始工作。打开新窗口的链接与以前一样失败。 edge_bug_frameset.jsp:

<%@ page %>
<!DOCtype html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Frames</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
    </head>

    <frameset frameborder="0" framespacing="0" border="0">
        <frame marginwidth="0" marginheight="0" src="edge_bug.jsp" name="heading" noresize scrolling="no"/>
        <noframes>Your browser doesn't handle frames.</noframes>
    </frameset>
</html>

浏览器版本:

Microsoft Edge 41.16299.15.0

Microsoft EdgeHTML 16.16299

更新:

我注意到,该行为因 Web 服务器中服务器证书的信任级别而异。

如果网络服务器具有不受信任的证书(红色盾牌和地址栏旁边的“证书错误”文本),则不会显示 pdf,并且行为如上所述。

如果网络服务器证书的信任级别较低(地址栏旁边的灰色挂锁),PDF 最初不会显示,但如果我首先选择始终允许弹出窗口,请等待 10 秒然后按 F5 (重新加载)显示 pdf。在随后的尝试中,pdf 最初仍不会显示,但在我按 F5 后会显示,我不再需要等待 10 秒再执行此操作。

如果网络服务器证书具有更高的信任级别(地址栏旁边的绿色挂锁),则 pdf 最初不会显示,但一旦我选择始终允许弹出窗口,它总是可以工作。

需要注意的是,即使 pdf 在新窗口中打开,这些新窗口也不是弹出窗口;当用户主动点击链接时,会打开一个新窗口。

【问题讨论】:

  • 如果您自己打开 PDF 是否有效?
  • @gregwhitworth 我可以自己打开 pdf,也可以通过 file:// url 在 Edge 中打开。如果它嵌入在frameset 中,则通过应用程序。
  • 好的,所以我尝试通过从这篇文章创建一个 PDF 来重现这一点,并且我能够使用这两个链接打开 PDF。代码中唯一的区别是我没有&lt;%@ page %&gt; 这是截图-imgur.com/a/5lwNX 你使用的是什么版本的 EdgeHTML(...> 设置)?
  • 另外,&lt;%@ page &gt; 有输出吗?我假设没有,但为了清楚起见,您能否确保在 DOCTYPE 之前没有空格或其他 Unicode 字符。
  • @gregwhitworth 该html在DOCTYPE之前有2个换行符,没有其他字符。我认为问题可能仅在使用证书和 https 时才会出现。

标签: pdf https certificate microsoft-edge


【解决方案1】:

对我来说,这似乎是 Microsoft Edge Edge HTML 中的一个错误。

我们已经通过解决方法解决了这个问题。我们建议用户在我们的 Web 应用程序中避免使用 Microsoft Edge。

对于某些用户,Microsoft Edge 是默认浏览器。我们已建议他们的 IT 部门使用企业模式站点列表来强制将 Internet Explorer 用于我们的 Web 应用程序,直到 Microsoft Edge 在 Chromium 上运行。

【讨论】:

    【解决方案2】:

    我在遇到类似问题时遇到了这篇文章,即 PDF 不会(仅)在 Edge 中显示。此问题仅在生产中出现,在本地运行代码时不会出现。最终我们发现我们的问题与运行应用程序的 apache 服务器的配置有关。

    原来 PDF 是由服务器分块发送到浏览器的。您可以在随 pdf 文件获得的响应标题中看到这一点:Transfer-Encoding: chunked。此外,没有发送内容长度标头。所以我们的假设是边缘可能一直在等待更多的块到达,因为它不知道预期的长度。因此它将永远等待,因为没有更多的块即将到来。显然其他浏览器已经找到了解决这个问题的方法,但 Edge 却做不到。

    我们的解决方案是删除 apache 服务器中 pdf 文件的 mod_deflate。通过删除它,它们不再以块的形式发送,并且内容长度标头被添加到响应中。我希望这可以帮助面临类似问题的人。

    【讨论】:

      【解决方案3】:

      我认为最新版本的 edge 80.x 及更高版本可能会解决此问题

      【讨论】: