我在本地机器上运行了一个 NodeJS 服务器,用于开发目的。默认情况下,它使用端口 1337。(我尝试过其他几个端口,例如 8080、1234、9000、9090、65432 等)。
我可以从 Chrome、Firefox 和 Opera 成功连接到此 NodeJS 服务器。但是,当我尝试使用 Internet Explorer 11 连接时,我看到“无法显示此页面”(见图)。
我尝试过各种“解决方案”,并查看了此网站上的几个问题/答案。但都没有奏效。其中包括:
- 我试过 127.0.0.1
- 我已禁用“保护模式”和“增强保护模式”。
- 我已将“localhost”添加到 Intranet 区域和信任区域。
- 我已经禁用“友好 HTTP 消息”,希望看到更多详细信息。
- 我尝试使用我的机器名称和 DNS 名称。
- 我尝试在我的主机文件中使用我的 IPv4 地址为“localhost”甚至“thisismyfrigginpc”创建手动条目。
我唯一成功过的情况是服务器在端口 80(http://localhost:80/
或http://localhost
)上运行。但是,由于各种原因,我无法在端口 80 上进行开发。我需要在 localhost+port(某个端口,80 和 443 以外的任何端口)上测试我的代码。
无帮助的问题和答案:
- 为什么我无法通过 IE 访问 http://localhost?
- Chrome 和 Firefox 可以访问 localhost,但 Internet Explorer 9 却不能。为什么?
- 如何在Metro IE10中测试本地网站?
- https://stackoverflow.com/questions/19268956/can-not-access-localhostport
请帮忙!
顺便说一句,运行的是 Windows 7 Enterprise 64 位。企业部署,但我有管理员权限。网络配置是相当标准的 DHCP,没有 NAT 和代理。
更新
根据@codenoire的建议,我安装了Fiddler来查看请求/响应。以下是从IE到Fiddler到服务器到Fiddler的原始请求和响应:
要求
GET http://localhost:1337/common/test.html HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: en-US
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Host: localhost:1337
回复
HTTP/1.1 200 OK
Set-Cookie: _session=WRuVLmrXMtjnDJY8;expires=Wed, 15 Jan 2014 23:19:16 GMT;path=/;domain=;httponly
Content-Type: text/html;charset=utf-8
Last-Modified: 1389818856000
Date: Wed, 15 Jan 2014 22:19:16 GMT
Connection: keep-alive
Content-Length: 128
<html>
<head>
<title>Connectivity Test Page</title>
</head>
<body>
<h1>This is a test page.</h1>
</body>
</html>
结果
更新 2014-01-17
我已经在安装了 IE 11 的“干净”非企业版 Windows 7 安装中测试了这种情况。结果与我的观察结果一致。这意味着可以排除由 Windows 企业版映像进行的任何配置导致问题的原因。此外,网络配置相当“原始”。
更新 2014-01-21
我尝试过 Internet Explorer“模拟”的想法。我创建了一个键“iexplorer.exe”,其值为 DWORD 和 QWORD 值(单独)8000, 8001, 9000, 9001, 10000, and 10001
。每次完成后,重新启动并再次测试。所有这些尝试都产生了相同的结果。顺便说一句,我们需要在 IE11 中测试此代码。从长远来看,各种兼容性代码和技巧实际上对我们没有帮助。
更新 2014-01-22
在端口 1337 上启动了 XAMPP Apache 服务器。IE 可以正常连接。因此,IE 不喜欢 NodeJS 响应,而其他浏览器似乎处理得很好。我们将调查我们的 NodeJS 代码,看看标头/内容中到底发生了什么,看看是否有任何异常。
2014-01-27 更新:解决方案
我只是想记录结果。原始响应包含 Content-Type:,text/html;charset=utf-8
根据正确答案,它应该是:Content-Type: text/html; charset=utf-8
类型和字符集之间有一个空格。
结果如下:
原始回应:
HTTP/1.1 200 OK
Set-Cookie: _session=EshWS7xDnCeV9pXS;expires=Mon, 27 Jan 2014 18:49:21 GMT;path=/;domain=;httponly
Date: Mon, 27 Jan 2014 17:49:21 GMT
Last-Modified: 1389818856000
Content-Type: text/html; charset=UTF-8
Content-Length: 128
Connection: keep-alive
<html>
<head>
<title>Connectivity Test Page</title>
</head>
<body>
<h1>This is a test page.</h1>
</body>
</html>
感谢@harrymc 揭示答案。
答案1
WWW3 文章设置 HTTP 字符集参数指定:
Content-Type: text/html; charset=utf-8
这定义Content-Type
为之前有一个空白charset
。
我知道你已经发现这确实是问题所在,所以问题的根源是微软或某些中间人代理的一些非常缺乏想象力的编程。
答案2
您的 IE 设置可能有问题。
解决此问题最简单的方法是打开 Internet 选项,转到高级选项卡,然后单击“重置 Internet Explorer 设置”。请确保选择该选项而不是“重置高级设置”,因为该选项不包含所有设置。
如果此方法无效,请尝试使用 127.0.0.1 而不是 localhost 进行导航。这不太可能解决问题,但有时可能会产生问题。
编辑:我想补充一下,这可能是 IE11 的问题。我知道我们遇到了很多兼容性问题。如果您不想回滚到 IE10 并尝试这样做,您可以随时从注册表中模拟:
在下面
HKLM\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\
您将创建一个名为的密钥:
FEATURE_BROWSER_EMULATION
并在其中创建一个 DWORD 值:
iexplorer.exe
值为下列之一:
IE8 - 8000 (or 8001)
IE9 - 9000 (or 9001)
IE10 - 10000 (or 10001)
我们在 10001 方面取得了最大的成功。
答案3
检查您的代理设置。由于您处于公司网络中,因此可能有人将不适当的代理策略强加到您的 IE 中(这不一定反映到其他浏览器中)。