2010-04-03 8 views
5

Ich verwende die PassthruAPP-Methode, um HTTP/HTTPS-Anforderungen von IE zu verknüpfen.Das Anhängen des http/https-Protokolls im IE bewirkt, dass GET-Anforderungen sequenziell sind.

Es funktioniert in den meisten Fällen gut, aber ich habe ein Problem festgestellt. Es ist immer nur ein Download-Thread aktiv, normalerweise verwendet IE zwei Download-Threads. Ich kann sehen, dass zwei IInternetProtocol-Objekte erstellt werden, IE jedoch nur jeweils einen.

Dies ist mit IE7 passiert, habe ich noch nicht mit anderen Versionen versucht.

Das Problem scheint zu sein, dass IE zum Herunterladen von Elementen nacheinander zurückgreift, wenn IInternetSession::RegisterNameSpace für eines seiner Standardhandler aufgerufen wird. Der folgende Code verursacht HTTP Downloads, um sequenziell zu sein, obwohl ich einen HTTPS Handler registriere. Die Registrierung für 'file: //' verursacht das gleiche Problem.

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

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

Dies geschieht immer in den ersten paar Elemente auf der Seite, aber es scheint, dass, nachdem das Dokument vollständig ausgegeben wird, simultane Downloads wieder auftreten können. Zum Beispiel kann Javascript-Code, der ausgeführt wird, nachdem die Seite geladen wurde, Bilder gleichzeitig gut laden.

+0

Übrigens ist dieses Problem in IE8 +, wo das Standardverbindungslimit höher ist, schlimmer. – EricLaw

+0

Nur getestet, ich bekomme zwei Download-Threads zu jeder Zeit mit IE8 statt der Standard 6, wenn keine benutzerdefinierten Protokoll-Handler definiert ist. – watsonmw

+0

@EricLaw Wurde das in IE9,10 und natürlich 11 "behoben"? Oder müssen wir die COM VTable haken .. –

Antwort

2

Ja, das bekannt ist, durch Design und in verschiedenen Orten dokumentiert. (Es ist getan, weil wir keine Annahmen über die Thread-Sicherheit von Protokollhandlern machen können)

Dies ist einer der vielen Gründe, warum es nicht empfohlen wird, die HTTP/HTTPS-Protokolle zu umbrechen.

+0

Der folgende Link für HTTP/HTTPS eine benutzerdefinierte Protokollhandler Nennungen Hinzufügen verursacht eine Leistungseinbuße beim Surfen: http://msdn.microsoft.com/en-us/library/aa767759(VS.85).aspx Sind Gibt es neben dem einzelnen aktiven Download-Thread noch weitere Leistungseinbußen? – watsonmw

+0

Links zu den Orten, an denen dies dokumentiert wird, wären für andere hilfreich, die zu dieser Frage kommen. – watsonmw

+0

Also, wie sollte man Anfragen vom IE abfangen, wenn es nicht HTTP (S) -Protokolle umschließt? Es gibt keine dokumentierten Techniken für diese Art von Aufgabe. – ReVolly