2010-04-03 26 views
5

我使用PassthruAPP方法挂钩到HTTP/HTTPS通过IE提出的请求。挂钩IE中的HTTP/HTTPS协议使GET请求是连续的

它的工作以及在大多数情况下,但是我注意到一个问题。一次只有一个下载线程处于活动状态,通常IE使用两个下载线程。我可以看到创建了两个IInternetProtocol对象,但IE一次只能使用一个。

这与IE7发生的事情,我还没有与其他版本试过没。

这个问题似乎是IE回落到下载的项目之一在当IInternetSession::RegisterNameSpace被要求任何的默认处理程序的时间。即使我正在注册HTTPS处理程序,下面的代码导致HTTP下载顺序。注册'file://'会导致相同的问题。

CComPtr<IInternetSession> spSession; 
CoInternetGetSession(0, &spSession, 0); 

MetaFactory::CreateInstance(CLSID_HttpSProtocol, &m_spCFHTTPS); 
spSession->RegisterNameSpace(m_spCFHTTPS, CLSID_NULL, L"https", 0, 0, 0) 

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

+0

顺便说一下,IE8 +中这个问题更严重,其中默认连接限制更高。 – EricLaw 2010-04-08 02:24:07

+0

刚刚测试过,我在IE8的任何时候都有两个活动的下载线程,而没有定义自定义协议处理程序时的缺省值6。 – watsonmw 2010-04-08 18:46:41

+0

@EricLaw在IE9,10和课程11中,这是否已被“固定”?或者我们不得不挂钩COM VTable .. – 2013-09-28 22:23:39

回答

2

是的,这是已知的,通过设计,并在不同的地方记录。 (它的完成,因为我们不能对协议处理的线程安全的假设)

这是它的建议,你不要试图包裹HTTP/HTTPS协议的众多原因之一。

+0

以下链接提到为HTTP/HTTPS添加自定义协议处理程序会导致浏览时的性能损失: http://msdn.microsoft.com/en-us/library/aa767759(VS.85).aspx 在单个活动下载线程旁边还有其他性能处罚? – watsonmw 2010-04-08 18:45:09

+0

链接到记录这些地方的地方将有助于其他人来到这个问题。 – watsonmw 2010-04-08 18:52:06

+0

那么如果不包装HTTP(S)协议,应该如何拦截来自IE的请求?这种任务没有记录技术。 – ReVolly 2012-07-01 17:43:07