Sobre o WinHTTP

Observação

Para contêineres de aplicativos e serviços do sistema desde Windows 10, versão 1709, HTTP/2 (consulte RFC7540) está ativado por padrão.

Os Serviços HTTP do Microsoft Windows (WinHTTP) fornecem uma interface de alto nível compatível com o servidor para os protocolos HTTP/2 e 1.1 da Internet. O WinHTTP foi projetado para ser usado principalmente em cenários baseados em servidor por aplicativos de servidor que se comunicam com servidores HTTP.

O WinINet foi projetado como uma plataforma de cliente HTTP para aplicativos da área de trabalho interativa. O WinINet exibe uma interface do usuário para algumas operações, como coletar credenciais do usuário. No entanto, o WinHTTP lida com essas operações programaticamente. Aplicativos de servidor que exigem serviços de cliente HTTP devem usar WinHTTP em vez de WinINet. Para obter mais informações, consulte Portabilidade de aplicativos WinINet para WinHTTP.

O WinHTTP também foi projetado para uso em serviços do sistema e aplicativos cliente baseados em HTTP. No entanto, aplicativos de usuário único que exigem funcionalidade de protocolo FTP, persistência de cookie, cache, manipulação automática de caixa de diálogo de credenciais, compatibilidade de Explorer da Internet ou suporte à plataforma de nível inferior devem considerar o uso do WinINet.

Essa interface pode ser acessada em C/C++ usando a API (interface de programação de aplicativo) WinHTTP ou usando as interfaces IWinHttpRequest e IWinHttpRequestEvents . O WinHTTP também pode ser acessado por meio do script e do Microsoft Visual Basic por meio do objeto WinHTTP. Para obter mais informações e descrições das funções individuais, consulte a referência de funções WinHTTP para a linguagem específica.

Começando com Windows 8, o WinHTTP fornece APIs para habilitar conexões usando o Protocolo WebSocketl, como WinHttpWebSocketSend e WinHttpWebSocketReceive.

Cuidado

O WinHTTP não é reentrante, exceto durante o retorno de chamada de conclusão assíncrona. Ou seja, enquanto um thread tem uma chamada pendente para uma das funções WinHTTP, como WinHttpSendRequest, WinHttpReceiveResponse, WinHttpQueryDataAvailable, WinHttpSendData ou WinHttpWriteData, ele nunca deve chamar WinHTTP uma segunda vez até que a primeira chamada seja concluída. Um cenário no qual uma segunda chamada pode ocorrer é o seguinte: se um aplicativo enfileirar uma APC (Chamada de Procedimento Assíncrono) para o thread que chama o WinHTTP e, se o WinHTTP executar uma espera alertável internamente, o APC poderá ser executado. Se a rotina de APC também chamar WinHTTP, ela reinseri a API WinHTTP e o estado interno do WinHTTP poderá ser corrompido.

Recursos do WinHTTP 5.1

Os seguintes recursos foram adicionados na versão 5.1 do WinHTTP:

  • Suporte a IPv6.
  • Funcionalidades do AutoProxy.
  • Protocolo HTTP/1.0, incluindo suporte para conexões keep alive (persistentes) e cookies de sessão.
  • Suporte à transferência em partes HTTP/1.1 para respostas HTTP.
  • Pooling keep alive de conexões anônimas entre sessões.
  • Funcionalidade SSL (Secure Sockets Layer), incluindo certificados de cliente. Os protocolos SSL com suporte incluem o seguinte: SSL 2.0, SSL 3.0 e TLS (Transport Layer Security) 1.0.
  • Suporte para autenticação de servidor e proxy, incluindo suporte integrado para o Microsoft Passport 1.4 e o pacote Negotiate/ Kerberos .
  • Tratamento automático de redirecionamentos, a menos que suprimido.
  • Interface com script além da API.
  • Utilitário de rastreamento para ajudar a solucionar problemas.

Não há suporte para vários recursos do WinINet no WinHTTP, incluindo cache de URL e cookies persistentes, reprodução automática, preenchimento automático, suporte offline e FTP (File Transfer Protocol).

Para obter mais informações sobre as alterações introduzidas na versão 5.1, consulte Novidades no WinHTTP 5.1.

Introdução com WinHTTP

Para obter mais informações sobre o WinHTTP, consulte os tópicos a seguir.