Novidades no WinHTTP 5.1

Este tópico descreve as diferenças mais importantes entre o WinHTTP versão 5.1 e a versão 5.0. Muitas dessas diferenças exigem alterações de código em aplicativos que migram da versão 5.0 para a versão 5.1. Alguns dos recursos da versão 5.1 só estão disponíveis a partir do Windows Server 2003 e do Windows XP com Service Pack 2 (SP2), especialmente recursos relacionados à melhoria da segurança do cliente em relação a servidores Web mal-intencionados.

Importante

Com o lançamento do WinHTTP versão 5.1, o download do WinHTTP 5.0 não está mais disponível. A partir de 1º de outubro de 2004, a Microsoft removeu o download do SDK do WinHTTP 5.0 do MSDN e encerrou o suporte ao produto para a versão 5.0.

 

Alteração de nome de DLL

O nome da nova DLL WinHTTP 5.1 é Winhttp.dll, enquanto o nome da DLL WinHTTP 5.0 é Winhttp5.dll.

O WinHTTP 5.0 e o 5.1 podem coexistir no mesmo sistema; O WinHTTP 5.1 não substitui nem instala o WinHTTP 5.0.

Redistribuição

O WinHTTP 5.1 está disponível apenas com o Windows Server 2003, Windows 2000 Professional com Service Pack 3 (SP3), Windows XP com Service Pack 1 (SP1) e sistemas operacionais posteriores. Um arquivo de módulo de mesclagem redistribuível (.msm) não está disponível para WinHTTP 5.1.

WinHttpRequest ProgID

O ProgID do componente WinHttpRequest foi alterado de "WinHttp.WinHttpRequest.5" para "WinHttp.WinHttpRequest.5.1". O CLSID da classe WinHttpRequest também foi alterado.

Alteração de comportamento de retorno de chamada assíncrona

Ao chamar as funções WinHttpWriteData, WinHttpQueryDataAvailable e WinHttpReadData no modo assíncrono, não dependa dos respectivos parâmetros lpdwNumberOfBytesWritten, lpdwNumberOfBytesAvailable e lpdwNumberOfBytesRead OUT a serem definidos. Se a chamada de função for concluída de forma assíncrona, o WinHTTP não gravará nesses ponteiros fornecidos pelo código do aplicativo. Em vez disso, o aplicativo deve recuperar esses valores usando os parâmetros lpvStatusInformation e dwStatusInformationLength para a função de retorno de chamada.

Alterações nas Configurações Padrão

As alterações nas configurações padrão incluem:

  • A verificação de certificado do servidor SSL está habilitada por padrão no WinHTTP 5.1. O WinHTTP 5.0 não lida com falhas encontradas ao validar o certificado do servidor como erros fatais; eles são relatados ao aplicativo usando uma notificação de retorno de chamada SECURE_FAILURE, mas não faz com que a solicitação seja anulada. O WinHTTP 5.1, como alternativa, lida com falhas de validação de certificado do servidor como erros fatais que anulam a solicitação. O aplicativo pode instruir o WinHTTP a ignorar um pequeno subconjunto de erros de certificado, como AC desconhecida, data de certificado inválida/expirada ou nome de entidade de certificado inválido, usando a opção WINHTTP_OPTION_SECURITY_FLAGS .
  • O suporte à autenticação do Passport está desabilitado por padrão no WinHTTP 5.1. O suporte ao Passport pode ser habilitado com a opção WINHTTP_OPTION_CONFIGURE_PASSPORT_AUTH . A pesquisa automática de credenciais do Passport no Keyring também está desabilitada por padrão.
  • Alteração de comportamento de redirecionamento: redirecionamentos HTTP de um https seguro: URL para um http regular: a URL não é mais seguida automaticamente por padrão por motivos de segurança. Há uma nova opção, WINHTTP_OPTION_REDIRECT_POLICY, para substituir o comportamento de redirecionamento padrão no WinHTTP 5.1. Com o componente COM WinHttpRequest , use a nova opção WinHttpRequestOption_EnableHttpsToHttpRedirects para habilitar redirecionamentos de https: para http: URLs.
  • Quando um arquivo de rastreamento WinHTTP é criado, o acesso é restrito com uma ACL de modo que somente os administradores possam ler ou gravar o arquivo. A conta de usuário sob a qual o tracefile foi criado também pode modificar a ACL para conceder acesso a outras pessoas. Essa proteção está disponível apenas em sistemas de arquivos que dão suporte à segurança; ou seja, NTFS, não FAT32).
  • A partir do Windows Server 2003 e do Windows XP com SP2, o envio de solicitações para as seguintes portas conhecidas, não HTTP, é restrito por motivos de segurança: 21 (FTP), 25 (SMTP), 70 (GOPHER), 110 (POP3), 119 (NNTP), 143 (IMAP).
  • A partir do Windows Server 2003 e do Windows XP com SP2, a quantidade máxima de dados de cabeçalho que o WinHTTP aceita em uma resposta HTTP é de 64K, por padrão. Se a resposta HTTP do servidor contiver mais de 64K do total de dados de cabeçalho, WinHTTP falhará na solicitação com um erro de ERROR_WINHTTP_INVALID_SERVER_RESPONSE . Esse limite de 64K pode ser substituído usando a nova opção WINHTTP_OPTION_MAX_RESPONSE_HEADER_SIZE .

Suporte a IPv6

O WinHTTP 5.1 adiciona suporte ao Protocolo internet versão 6 (IPv6). O WinHTTP pode enviar solicitações HTTP para um servidor cujo nome DNS é resolvido em um endereço IPv6 e, começando com o Windows Server 2003 e o Windows XP com SP2, o WinHTTP também dá suporte a endereços literais IPv6.

Novas opções na API C/C++ para WinHTTP

O WinHTTP 5.1 implementa as seguintes novas opções:

"\#define WINHTTP\_OPTION\_PASSPORT\_SIGN\_OUT 86" "\#define WINHTTP\_OPTION\_PASSPORT\_RETURN\_URL 87" "\#define WINHTTP\_OPTION\_REDIRECT\_POLICY 88"

A partir do Windows Server 2003 e do Windows XP com SP2, o WinHTTP 5.1 implementa as novas opções a seguir. No Windows 2000 Professional com SP3 ou Windows XP com SP1, no entanto, as chamadas para WinHttpSetOption ou WinHttpQueryOption com essas IDs de opção falham:

"\#define WINHTTP\_OPTION\_RECEIVE\_RESPONSE\_TIMEOUT 7" "\#define WINHTTP\_OPTION\_MAX\_HTTP\_AUTOMATIC\_REDIRECTS 89" "\#define WINHTTP\_OPTION\_MAX\_HTTP\_STATUS\_CONTINUE 90" "\#define WINHTTP\_OPTION\_MAX\_RESPONSE\_HEADER\_SIZE 91" "\#define WINHTTP\_OPTION\_MAX\_RESPONSE\_DRAIN\_SIZE 92"

Novas opções no componente WinHttpRequest 5.1

O componente WinHttpRequest 5.1 implementa as seguintes novas opções:

"WinHttpRequestOption\_RevertImpersonationOverSsl" "WinHttpRequestOption\_EnableHttpsToHttpRedirects" "WinHttpRequestOption\_EnablePassportAuthentication"

As novas opções do WinHttpRequest 5.1 a seguir estão disponíveis a partir do Windows Server 2003 e do Windows XP com SP2:

"WinHttpRequestOption\_MaxAutomaticRedirects" "WinHttpRequestOption\_MaxResponseHeaderSize" "WinHttpRequestOption\_MaxResponseDrainSize" "WinHttpRequestOptions\_EnableHttp1\_1"

Proxies não são confiáveis quando a segurança de logon automático é definida como alta

No WinHTTP 5.0, os servidores proxy são sempre confiáveis para logon automático. Isso não é mais válido para o WinHTTP 5.1 em execução no Windows Server 2003 e no Windows XP com SP2 quando a opção de política de WINHTTP_AUTOLOGON_SECURITY_LEVEL_HIGH é definida.

API de Descoberta Automática de Proxy Web (AutoProxy)

Para facilitar a configuração das configurações de proxy para aplicativos baseados em WinHTTP, o WinHTTP agora implementa o protocolo WPAD (Descoberta Automática de Proxy Web), também conhecido como autoproxy. Esse é o mesmo protocolo que navegadores da Web, como a Internet Explorer, implementam para descobrir a configuração de proxy automaticamente sem exigir que um usuário final especifique um servidor proxy manualmente. Para dar suporte à reprodução automática, o WinHTTP 5.1 implementa uma nova função C/C++, WinHttpGetProxyForUrl, além de duas funções de suporte, WinHttpDetectAutoProxyConfigUrl e WinHttpGetIEProxyConfigForCurrentUser.

Problemas conhecidos

Os problemas a seguir são conhecidos por existirem no WinHTTP 5.1 no Windows 2000 Professional com SP3 e Windows XP com SP1. Esses problemas são resolvidos para WinHTTP começando com o Windows Server 2003 e o Windows XP com SP2:

  • Se o aplicativo usar a função WinHttpSetTimeouts ou o método SetTimeouts no componente WinHttpRequest para definir um DNS não infinito resolve tempo limite, como o parâmetro dwResolveTimeout, ocorrerá um vazamento de identificador de thread sempre que WinHTTP resolver um nome DNS. Em um grande número de solicitações HTTP, isso causa um vazamento significativo de memória. A solução alternativa é deixar a configuração de tempo limite de resolve infinito padrão inalterada (um valor de 0 especifica um tempo limite infinito). Isso é altamente recomendado em qualquer caso, pois o suporte a tempos limite em resoluções de nome DNS no WinHTTP é caro em termos de desempenho. Para o Windows 2000 e posterior, a definição de um tempo limite de resolve DNS no WinHTTP é desnecessária, pois o serviço cliente DNS subjacente implementa seu próprio tempo limite de resolve.
  • Ao processar solicitações assíncronas, o WinHTTP não manipula a representação de thread corretamente. Isso faz com que as solicitações que exigem a falha da autenticação NTLM/Negotiate, a menos que as credenciais sejam fornecidas explicitamente usando as funções WinHttpSetCredentials ou WinHttpSetOption .