Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Importante
Escolhendo a pilha HTTP de Windows correta
| Scenario | API recomendada |
|---|---|
| serviço do Windows, daemon ou código do servidor | WinHTTP — projetado para serviços; suporta representação de identidade, isolamento de sessão |
| Aplicativo de desktop que requer configurações de proxy de Opções da Internet (IE), cookies ou solicitações de credenciais | WinINet — herda automaticamente a configuração de Opções de Internet do usuário |
| Aplicativo C++ moderno (UWP ou Desktop) | Windows.Web.Http (C++/WinRT) — moderno, com foco em assincronia, com suporte a TLS moderno |
| Aplicativo .NET | System.Net.HttpClient — conexões gerenciadas, multiplataforma e em pool |
| C/C++ multiplataforma | libcurl ou bibliotecas HTTP da plataforma — não específicas do Windows |
Principais diferenças do WinINet: o WinHTTP não compartilha cookies, cache ou credenciais com o navegador do usuário. Não há prompts na interface do usuário. Ele dá suporte à execução em contas de serviço e representação. Consulte WinINet vs. WinHTTP para obter uma comparação completa de recursos.
Note
Padrões de segurança — o WinHTTP segue a configuração do Schannel do sistema operacional para negociação de versão do TLS. Sempre valide os certificados do servidor; nunca defina WINHTTP_OPTION_SECURITY_FLAGS para ignorar erros de certificado em produção. Para a configuração do TLS, consulte considerações sobre segurança do WinHTTP.
Note
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.
Microsoft Windows Serviços HTTP (WinHTTP) fornece uma interface de alto nível com suporte para 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 de área de trabalho interativos. O WinINet exibe uma interface do usuário para algumas operações, como coletar credenciais de usuário. No entanto, o WinHTTP manipula 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 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 de script e 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 WebSocketl, como WinHttpWebSocketSend e WinHttpWebSocketReceive.
Cuidado
WinHTTP não é reentrante, exceto durante o callback 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 enfileira 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 vier a chamar o WinHTTP, ela entrará novamente na API do 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 de AutoProxy.
- Protocolo HTTP/1.0, incluindo suporte para conexões keep-alive (persistentes) e cookies de sessão.
- Suporte à transferência fragmentada do HTTP/1.1 em respostas HTTP.
- Pool de conexões anônimas persistentes 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 Microsoft Passport 1.4 e o pacote Negotiate/Kerberos.
- Gerenciamento automático de redirecionamentos, a menos que seja desativado.
- Interface com script 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, reprodução automática, preenchimento automático, suporte offline e FTP (Protocolo de Transferência de Arquivo).
Para obter mais informações sobre as alterações introduzidas na versão 5.1, consulte As novidades no WinHTTP 5.1.
Introdução ao WinHTTP
Para obter mais informações sobre o WinHTTP, consulte os tópicos a seguir.
- WinINet vs. WinHTTP compara as duas tecnologias para acessar HTTP.
- As versões do WinHTTP descrevem o histórico de versões do WinHTTP.
- Novidades no WinHTTP 5.1 descreve alterações e novos recursos no WinHTTP 5.1.
- A Terminologia de Rede descreve conceitos úteis e terminologia relacionadas à rede em geral e ao protocolo HTTP em particular.
- Escolher uma interface WinHTTP descreve a API C/C++ e a interface COM para WinHTTP.
- Considerações de segurança do WinHTTP descreve os problemas de segurança a serem cientes ao usar o WinHTTP.
- A portabilidade de aplicativos WinINet para WinHTTP descreve como modificar seus aplicativos WinINet existentes para usar a API WinHTTP.