Internet Explorer 9 无法识别 servlet 从 weblogic 服务器发送并以文档模式 IE7 呈现的​​ doctype - 启动前的额外字符?

Internet explorer 9 will not recognize doctype sent by servlet from weblogic server and renders in document mode IE7 - extra characters before start?

问题

当我在本地或服务器上拥有我的页面时,Internet Explorer 9 不会以同样的方式考虑 <!DOCTYPE html>。我做了一个简单的测试页面来突出问题:

编辑: 更新了带有元标记和 css link

的简单测试页面
<!DOCTYPE html>
<html lang="en">
    <head>
        <link rel="stylesheet" href="css/environmentinfo.css" />
        <meta http-equiv="x-ua-compatible" content="IE=edge"/>
    </head>
    <body>
        <script>
            document.write(document.compatMode);
            document.write('<br/>');
            document.write(document.documentMode);
        </script>
    </body>
</html>

当我在 IE9 中打开本地系统上的文件时,它显示:

CSS1Compat

9

当我在服务器上部署它时,它显示:

CSS1Compat

7

服务器

所以我从 weblogic 服务器提供文件。它部署在一个简单的 war 存档中,并由默认的 servlet 提供服务。 本地文件仅由文件系统提供(url 栏中的 C:...\test.html)。

调试信息

我查看了编码(两者相同)和存在的有效字符(通过记事本++和通过 wireshark)。

本地文件:

<!DOCTYPE html>\r\n
<html lang="en">\r\n
    <head>\r\n
    </head>\r\n
    <body>\r\n
        <script>\r\n
            document.write(document.compatMode);\r\n
            document.write('<br/>');\r\n
            document.write(document.documentMode);\r\n
        </script>\r\n
    </body>\r\n
</html>

服务器响应:

HTTP/1.1 200 OK\r\n
Date: Fri, 13 Mar 2015 12:34:26 GTM\r\n
Accept-Ranges: bytes\r\n
Content-Length: 427\r\n
Content-Type: text/html\r\n
Last-Modified: Fri, 13 Mar 2015 12:29:30 GMT\r\n
X-Powered-By: Servlet/3.0 JSP/2.2\r\n
\r\n
<!DOCTYPE html>\r\n
<html lang="en">\r\n
    <head>\r\n
    </head>\r\n
    <body>\r\n
        <script>\r\n
            document.write(document.compatMode);\r\n
            document.write('<br/>');\r\n
            document.write(document.documentMode);\r\n
        </script>\r\n
    </body>\r\n
</html>

我看过其他一些类似的问题,发现 IE 会忽略 <!DOCTYPE html> 如果前面有任何字符。我检查了 html 规范,它指出 headers,然后是一个换行符,然后是文档的开头。所以似乎没有多余的字符。使用 wireshark,我可以看到实际的字节并且似乎没有任何额外的字符。答案、提示甚至其他要看的东西都将不胜感激。

IE 可能有一些配置设置覆盖了标记中的 <!doctype html>。根据 https://msdn.microsoft.com/en-us/library/ie/jj676914(v=vs.85).aspx:

Pages opened in the Intranet zone might be treated differently, depending on the configuration of the browser, the presence of group policy options, and other factors.

尝试检查上面文章中列出的地方。

除此之外,您可以根据 https://msdn.microsoft.com/en-us/library/ie/jj676913(v=vs.85).aspx

使用 X-UA-Compatible HTTP header 或 <meta> 标签尝试强制文档兼容模式

在一些恶劣的情况下,当符合标准的页面加载到由怪癖页面托管的 iframe 中时,可能需要重新加载 iframe 以强制其进入正确的文档模式。

请注意,一旦 IE 开始呈现页面,文档模式就确定下来,无法即时更改。因此,文档模式的每条指令都必须尽可能早地出现。例如,正如您已经提到的,<!doctype html> 必须是第一行,<meta>X-UA-Compatible 必须是 <head> 中的第一个标记。我会说,如果您可以控制服务器端,请使用 HTTP header 而不是 <meta> 来确保它在任何渲染发生之前切换文档模式。