【问题标题】:IE7 stops making network requests after a whileIE7 在一段时间后停止发出网络请求
【发布时间】:2009-06-23 09:51:36
【问题描述】:

我们的 (asp.net) 系统是一个更大系统的一部分。它是通过这个更大的系统从 javascript 启动的,该系统执行 window.open 调用以打开一个新窗口。

(此外,身份验证数据等通过加密的查询字符串参数传递到我们的系统)

在使用 IE7 进行测试时(不幸的是,该组织已对此进行了标准化),浏览器在使用我们的系统(在页面中导航)一段时间后(其间歇性)将开始不发出网络请求。按 F5 会显示其加载动画,但实际上没有任何反应)。

您可以关闭我们的窗口,然后返回到更大的系统(在它自己的窗口中),它仍然可以正常工作。如果您重新启动我们的系统,新窗口会打开,看起来像是正在加载,但没有发出任何请求(使用 wireshark 验证)。这些系统位于不同的子域中。

有趣的是,如果我启动 Fiddler,一切都会正常运行。一旦我关闭 Fiddler,它就会停止发出网络请求。

该系统是一个相当重的 html/javascript/ajax 系统(每页 1MB+),但这不应该导致浏览器这样做。显然 Firefox 和 Chrome 可以完美运行 :)

让它再次工作的唯一方法是关闭所有 IE 窗口,然后重新启动。

我已经禁用代理服务器,启用它,做了我能想到的几乎所有事情。

有人有什么想法吗?

更新

我设法在 fiddler 运行时重现了它。最初,当它工作时,我可以在 Fiddler 中看到所有请求。当它进入“无请求”模式时(再次注意,没有任何变化,我只是在四处浏览),我在 Fiddler 中看不到任何东西(即没有新请求,什么都没有)。 fiddler 记录的所有请求都已完成,因此没有打开的连接。

我们几乎在每台机器上都看到了这种情况。浏览大约 15 页后,这开始发生。会不会是环境问题?我的测试机器是安装了 McAfee IE7 的 vanilla XP。没有其他任何东西在运行,并且 IE 中没有安装任何工具栏。

【问题讨论】:

    标签: asp.net ajax internet-explorer internet-explorer-7 fiddler


    【解决方案1】:

    尝试合并 http://www.enhanceie.com/dl/fixHTTPMax.reg 以提高 HTTP 连接限制,然后检查是否需要大约 10 倍的时间才能遇到问题。

    如果是这样,那么问题在于您遇到了 HTTP 连接泄露的问题,然后您最终达到了每服务器最大连接数限制。

    【讨论】:

    • 这行得通,合并这个 reg 文件后我们不会再遇到问题了。不是最好的解决方案,但我们的系统只有大约 10 个实际用户,所以它不是世界末日。
    • 您是否碰巧安装了 AVG LinkScanner 插件?
    【解决方案2】:

    在 IE 中打开 JavaScript 调试并检查出现的任何错误。

    【讨论】:

    • 不可能有任何 javascript 错误,因为发生这种情况时页面尚未加载(即我按 F5 或 Ctrl+F5 并且它没有发出请求)
    • OK- 我想接下来要做的是检查您是否有 IE 7 的最新更新。如果您有或不能这样做,那么请禁用任何 IE 插件。这些通常会阻止 IE 正常工作。
    【解决方案3】:

    fiddler 的自动代理设置让你陷入了困境。

    fiddler 启动时,它会修改 IE 的代理设置,使其指向 fiddler,当 fiddler 关闭时,它会恢复原始代理设置。

    如果提琴手看到现有的代理设置,它将在它转发的请求中使用这些设置。

    在某些错误情况下,您可能没有运行提琴手,但提琴手代理修改仍然在 IE 设置中。您最终可能会遇到 IE 仅在 Fiddler 运行时才有效的情况。

    重置 IE 的代理设置。

    编辑

    失败的最可能原因是有尚未完成的未完成请求。拥有其中两个,在默认的 IE 配置中,所有其他请求将无限期地等待未完成的请求完成。启动 fiddler 可以暂时解决这个问题,因为请求不会直接发送到服务器。你能重现提琴手运行的问题吗?您在提琴手中看到未完成的请求吗?

    【讨论】:

    • 感谢安东尼的回复。我已经测试了所有这些(重置代理设置等)问题甚至在我运行提琴手(并且关闭代理设置)之前就出现了。系统正在工作,然后在您使用它时突然停止。
    • @Anthony- 关于未完成的请求,这是一个很好的观点。 IE 7 只能用 HTTP 1.0 做 4 个并发连接,用 HTTP 1.1 做 2 个并发连接到同一主机。
    • 好点,我已经做了一些测试,不幸的是,情况似乎并非如此(请参阅问题中的更新)。
    【解决方案4】:

    完成后确保在 HTTP 标头中设置 connect: close

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-04
      • 1970-01-01
      • 2020-09-16
      • 1970-01-01
      • 2021-01-05
      • 2019-11-25
      • 1970-01-01
      • 2019-07-28
      相关资源
      最近更新 更多