Зацепляя протокол HTTP / HTTPS в IE Pourses Get запросы, чтобы быть последовательными

StackOverflow https://stackoverflow.com/questions/2569878

Вопрос

Я использую Passthruapp. Способ для подключения запросов HTTP / HTTPS, сделанные IE.

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

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

Проблема, кажется, что то есть возвращается к загрузке элементов по одному времени, когда 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 VTBABE для InternetProtocolRootEx::StartEx() на зарегистрированных протоколах HTTP / HTTPS. Поскольку это не заменяет обработчик протокола напрямую, т. Е. Не откажется до одной резьбы.

Техника описана здесь:

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

Другие советы

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

Это одна из многих причин, по которым рекомендуется, чтобы вы не пытались обернуть протоколы HTTP / HTTPS.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top