5

我遇到了一个非常奇怪的问题,浏览器的 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,但我仍然想知道发生了什么。有没有人见过这样的行为,或者知道这里出了什么问题?

4

1 回答 1

0

我们最近在使用 Restlet 时遇到了类似的问题,这也导致了一些请求没有完成。问题是 Restlet 中的非同步地图访问,已修复 ( https://github.com/restlet/restlet-framework-java/issues/753 )。

如果您看到一个或多个线程导致高 CPU 流量,这可能表明您受到此问题的影响。

如果您的 XMLHttpRequests 并行出现,您可能会受到影响。

于 2013-06-05T06:35:20.873 回答