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.

O WinHTTP (Serviços HTTP do Microsoft Windows) fornece uma interface de alto nível com suporte para servidor para os protocolos de Internet HTTP/2 e 1.1. 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 de área de trabalho interativos. O WinINet exibe uma interface do usuário para algumas operações, como a coleta de credenciais do usuário. No entanto, o WinHTTP lida com essas operações programaticamente. Aplicativos de servidor que exigem serviços cliente HTTP devem usar WinHTTP em vez de WinINet. Para obter mais informações, consulte como portar 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, tratamento automático de caixa de diálogo de credencial, compatibilidade com o Internet Explorer ou suporte à plataforma de nível inferior devem considerar o uso do WinINet.

Essa interface é acessível a partir de 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 o idioma específico.

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

Cuidado

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 em que 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 WinHTTP executar uma espera alertável internamente, o APC poderá ser executado. Se a rotina de APC também chamar WinHTTP, ela reentrada na 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 para IPv6.
  • Recursos de 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.
  • Pool de conexões anônimas em 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 scriptável além da API.
  • Utilitário de rastreamento para ajudar a solucionar problemas.

Não há suporte para vários recursos WinINet no WinHTTP, incluindo cache de URL e cookies persistentes, autoproxia, preenchimento automático, suporte offline e FTP (Protocolo de Transferência de Arquivos).

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

Introdução com WinHTTP

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