钩住在IE中的HTTP / HTTPS协议使GET请求是连续的
-
24-09-2019 - |
题
我使用的 PassthruAPP 方法钩到HTTP / HTTPS请求由IE制成。
它在大多数情况下工作良好,但是我注意到一个问题。只有一个下载线程是活动的时候,通常IE使用了两个下载线程数。我可以看到两个IInternetProtocol对象入门创建,但IE只使用一次一个。
此与IE7发生,我还没有与其他版本试图尚未。
这个问题似乎是IE回落到下载的项目之一在当IInternetSession::RegisterNameSpace
被要求任何的默认处理程序的时间。下面的原因代码的 HTTP 强>下载是连续的,即使我登记的 HTTPS 强>处理程序。注册关于“文件://”导致相同的问题
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代码加载完成后可以加载图像同时就好了。
解决方案
这是可以通过打补丁的COM虚函数表上登记的HTTP / HTTPS协议InternetProtocolRootEx::StartEx()
来解决这个问题。因为这不直接替换协议处理程序,IE不会后退到单个线程模型。
该技术描述如下:
其他提示
是,这是已知的,通过设计,并在不同的地方记录。 (它的完成,因为我们不能对协议处理的线程安全的假设)
这是其中的原因很多,它的建议,你不要试图包裹HTTP / HTTPS协议。
不隶属于 StackOverflow