我遇到了一个非常奇怪的问题,浏览器的 HTTP 请求似乎被 Restlet 服务器使用的简单连接器丢弃了。
服务器设置:
- Restlet 2.1.2 服务器
- Restlet-Simple 扩展(带有 Simple 4.1.21)
- 用于摘要身份验证的 Restlet-crypto 扩展
服务器正在为浏览器提供网页,并使用 javascript 的 XMLHttpRequest 来获取更新。但是,其中一些 XMLHttpRequest 没有完成。Chrome 的 javascript 调试器显示这些的“失败”状态;Firefox 的调试器会记录一个没有 HTTP 状态代码的完成时间并记录响应。数据包嗅探器表明有问题的请求实际上已发送到服务器,但服务器从未响应。调试表明这些请求永远不会到达我们的服务器代码。
我已经用 Firefox、Chrome 和 IE 验证了这个问题。所有三个浏览器(最新版本)都遇到了这个问题。此外,每个浏览器都会重复且可重现地遇到完全相同的请求问题。但是,这组请求在三个浏览器之间有所不同。
真正奇怪的是,当使用服务器的机器名称(测试在 LAN 上运行)时问题确实会出现,但在使用机器的 IP 地址时不会出现。从 Digest 身份验证切换回 Basic 身份验证也可以解决问题,将 Simple 连接器替换为 Jetty 也是如此。
我现在倾向于切换到 Jetty,但我仍然想知道发生了什么。有没有人见过这样的行为,或者知道这里出了什么问题?