Question

J'utilise le PassthruAPP procédé pour le raccordement à des demandes HTTP / HTTPS faites par IE.

Il fonctionne bien pour la plupart, mais je remarqué un problème. Un seul thread de téléchargement est actif à la fois, normalement IE utilise deux threads de téléchargement. Je peux voir deux objets se IInternetProtocol créés, mais IE utilise un seul à la fois.

Ce qui se passe avec IE7, je n'ai pas essayé avec d'autres versions encore.

Le problème semble être que IE revient à télécharger les éléments un à un moment où IInternetSession::RegisterNameSpace est appelé à l'un de ses gestionnaires par défaut. Le code ci-dessous les causes HTTP téléchargements pour être séquentiel, même si j'enregistre HTTPS gestionnaire. Enregistrement pour 'file: //' provoque le même problème

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

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

Cela se produit toujours pour les premiers éléments de la page, mais il semble que, après le document complet est publié, les téléchargements simultanés peuvent se produire à nouveau. Par exemple le code Javascript qui est exécuté après que la page a terminé le chargement peut charger des images en même temps que très bien.

Était-ce utile?

La solution

Il est possible de contourner ce problème en patcher le COM VTable pour InternetProtocolRootEx::StartEx() sur les protocoles HTTP / HTTPS enregistrés. Etant donné que cela ne remplace pas le gestionnaire de protocole directement, IE ne sera pas repli à l'unique modèle de fil.

La technique est décrite ici:

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

Autres conseils

Oui, ceci est connu, par la conception et documentée dans divers endroits. (Il est fait parce que nous ne pouvons pas faire des hypothèses sur la sécurité des threads des gestionnaires de protocole)

Ceci est l'une des raisons nombreux qu'il est suggéré que vous ne tentez pas d'envelopper les protocoles HTTP / HTTPS.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top