我正在使用通行APP方法挂钩 IE 发出的 HTTP/HTTPS 请求。
它在大多数情况下运行良好,但我注意到一个问题。一次只有一个下载线程处于活动状态,通常 IE 使用两个下载线程。我可以看到创建了两个 IInternetProtocol 对象,但 IE 一次只使用一个。
IE7出现这种情况,其他版本还没试过。
问题似乎是 IE 在以下情况下会回退到一次下载一个项目:IInternetSession::RegisterNameSpace
为其任何默认处理程序调用。下面的代码导致HTTP即使我正在注册,下载也会按顺序进行HTTPS处理程序。注册“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 代码可以同时加载图像。
可以通过修补 COM VTable 来解决此问题InternetProtocolRootEx::StartEx()
在已注册的 HTTP/HTTPS 协议上。由于这不会直接替换协议处理程序,因此 IE 不会回退到单线程模型。
该技术描述如下:
http://web.archive.org/web/20130313164317/http://www.blackfishsoftware.com/blog/don/passthroughapp_bho_toolbar_intercepting_requests_responses
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)