Conectando o protocolo HTTP/HTTPS no IE FATAS GET PEDIDOS QUE SER
-
24-09-2019 - |
Pergunta
Estou usando o Passthruapp Método para conectar -se às solicitações HTTP/HTTPS feitas pelo IE.
Está funcionando bem na maior parte, no entanto, notei um problema. Apenas um tópico de download está ativo de cada vez, normalmente o IE usa dois threads de download. Eu posso ver dois objetos iinternetProtocol sendo criados, mas o IE usa apenas um de cada vez.
Isso está acontecendo com o IE7, ainda não tentei com outras versões.
O problema parece ser que o IE volta a baixar itens um de cada vez quando IInternetSession::RegisterNameSpace
é chamado para qualquer um de seus manipuladores padrão. O código abaixo causa Http Downloads para serem seqüenciais, embora eu esteja registrando um Https manipulador. O registro do 'arquivo: //' causa o mesmo problema.
CComPtr<IInternetSession> spSession;
CoInternetGetSession(0, &spSession, 0);
MetaFactory::CreateInstance(CLSID_HttpSProtocol, &m_spCFHTTPS);
spSession->RegisterNameSpace(m_spCFHTTPS, CLSID_NULL, L"https", 0, 0, 0)
Isso sempre acontece nos primeiros itens da página, mas parece que, após a emissão do documento, os downloads simultâneos podem ocorrer novamente. Por exemplo, o código JavaScript que é executado após a página terminar de carregar pode carregar imagens simultaneamente bem.
Solução
É possível contornar esse problema, corrigindo o conflito para InternetProtocolRootEx::StartEx()
nos protocolos HTTP/HTTPS registrados. Como isso não substitui o manipulador de protocolo diretamente, o IE não fará o fallback do modelo de encadeamento único.
A técnica é descrita aqui:
Outras dicas
Sim, isso é conhecido, por design e documentado em vários lugares. (É feito porque não podemos fazer suposições sobre a segurança do fio dos manipuladores de protocolo)
Essa é uma das muitas razões pelas quais é sugerido que você não tente embrulhar os protocolos HTTP/HTTPS.