在IE中挂钩http / https协议会导致GET请求顺序

时间:2010-04-03 00:43:02

标签: internet-explorer http com iwebbrowser2 microsoft.mshtml

我正在使用PassthruAPP方法挂钩IE发出的HTTP / HTTPS请求。

它在大多数情况下都运行良好,但我注意到了一个问题。一次只有一个下载线程是活动的,通常IE使用两个下载线程。我可以看到两个IInternetProtocol对象被创建,但IE一次只使用一个。

IE7正在发生这种情况,我还没有尝试过其他版本。

问题似乎是当IE为其任何默认处理程序调用{​​{1}}时,IE会回退到一次下载项目。即使我正在注册 HTTPS 处理程序,下面的代码也会导致 HTTP 下载顺序。注册'file://'会导致同样的问题。

IInternetSession::RegisterNameSpace

这总是发生在页面上的前几个项目中,但似乎在发布文档完成后,可以再次发生并发下载。例如,在页面加载完成后执行的Javascript代码可以同时加载图像。

2 个答案:

答案 0 :(得分:3)

通过在已注册的HTTP / HTTPS协议上为InternetProtocolRootEx::StartEx()修补COM VTable,可以解决此问题。由于这不会直接替换协议处理程序,因此IE不会回退到单线程模型。

这里描述了这种技术:

http://web.archive.org/web/20130313164317/http://www.blackfishsoftware.com/blog/don/passthroughapp_bho_toolbar_intercepting_requests_responses

答案 1 :(得分:2)

是的,这在设计上是已知的,并且记录在各个地方。 (这样做是因为我们无法对协议处理程序的线程安全性做出假设)

这是许多原因之一,建议您不要尝试包装HTTP / HTTPS协议。