Сцепление http/https протокола в причинах IE ЗАСТАВЛЯЕТ запросы быть последовательными

Я использую метод PassthruAPP для сцепления в HTTP/запросы HTTPS, сделанный IE.

Это работает хорошо по большей части, однако я заметил проблему. Только один поток загрузки активен за один раз, обычно IE использует два потока загрузки. Я вижу два объекта IInternetProtocol быть созданным, но IE использует только по одному.

Это происходит с IE7, я еще не попробовал другими версиями.

Проблема, кажется, что IE отступает к загрузке объектов по одному когда IInternetSession::RegisterNameSpace назван для любого из его обработчиков по умолчанию. Код ниже заставляет Загрузки http быть последовательными даже при том, что я регистрирую обработчик HTTPS. Регистрация для 'file://' вызывает ту же проблему.

CComPtr spSession;
CoInternetGetSession(0, &spSession, 0);

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

Это всегда происходит для первых нескольких объектов на странице, но кажется, что после того, как завершенный документ выпущен, параллельные загрузки могут произойти снова. Например, код JavaScript, который выполняется после страницы, закончил загружаться, может загрузить изображения одновременно очень хорошо.

5
задан watsonmw 8 April 2010 в 02:38
поделиться

2 ответа

Эту проблему можно обойти, исправив 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

3
ответ дан 14 December 2019 в 19:08
поделиться

Да, это известно и задокументировано в разных местах. (Это сделано, потому что мы не можем делать предположений о поточной безопасности обработчиков протоколов)

Это одна из МНОГИХ причин, по которым предлагается не пытаться обернуть протоколы HTTP / HTTPS.

2
ответ дан 14 December 2019 в 19:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: