Informazioni su WinHTTP

Importante

Scelta dello stack HTTP Windows corretto

Scenario API consigliata
servizio Windows, daemon o codice lato server WinHTTP — progettato per servizi; supporta l'impersonificazione, l'isolamento della sessione
L'app desktop richiede impostazioni proxy, cookie o richieste di credenziali di Internet Options (IE) WinINet : eredita automaticamente la configurazione delle opzioni Internet dell'utente
App C++ moderna (UWP o Desktop) Windows.Web.Http (C++/WinRT) — moderno, progettato in ottica asincrona, con supporto TLS moderno
Applicazione .NET System.Net.Http.HttpClient : connessioni gestite, multipiattaforma e in pool
C/C++ multipiattaforma libcurl o le librerie HTTP della piattaforma — non specifiche di Windows

Differenze principali rispetto a WinINet: WinHTTP non condivide cookie, cache o credenziali con il browser dell'utente. Non visualizza alcun prompt dell'interfaccia utente. Supporta l'esecuzione tramite account di servizio e l'impersonificazione. Per un confronto completo delle funzionalità, vedere WinINet e WinHTTP .

Note

Impostazioni predefinite per la sicurezza : WinHTTP segue la configurazione Schannel del sistema operativo per la negoziazione della versione TLS. Convalidare sempre i certificati del server; non impostare WINHTTP_OPTION_SECURITY_FLAGS mai per ignorare gli errori del certificato nell'ambiente di produzione. Per la configurazione di TLS, vedere Considerazioni sulla sicurezza di WinHTTP.

Note

Per i contenitori di app e i servizi di sistema a partire da Windows 10 versione 1709, HTTP/2 (vedere RFC7540) è attivato per impostazione predefinita.

Microsoft Windows Servizi HTTP (WinHTTP) offre un'interfaccia di alto livello e supportata dal server ai protocolli HTTP/2 e 1.1 Internet. WinHTTP è progettato per essere usato principalmente in scenari basati su server da applicazioni server che comunicano con server HTTP.

WinINet è stato progettato come piattaforma client HTTP per applicazioni desktop interattive. WinINet visualizza un'interfaccia utente per alcune operazioni, ad esempio la raccolta delle credenziali utente. WinHTTP, tuttavia, gestisce queste operazioni a livello di codice. Le applicazioni server che richiedono servizi client HTTP devono usare WinHTTP anziché WinINet. Per altre informazioni, vedere Conversione di applicazioni WinINet in WinHTTP.

WinHTTP è progettato anche per l'uso nei servizi di sistema e nelle applicazioni client basate su HTTP. Tuttavia, le applicazioni a utente singolo che richiedono funzionalità del protocollo FTP, persistenza dei cookie, memorizzazione nella cache, gestione automatica delle finestre di dialogo delle credenziali, compatibilità Internet Explorer o supporto della piattaforma di livello inferiore devono prendere in considerazione l'uso di WinINet.

Questa interfaccia è accessibile da C/C++ usando l'API (Application Programming Interface) WinHTTP o tramite le interfacce IWinHttpRequest e IWinHttpRequestEvents . WinHTTP è accessibile anche da script e Microsoft Visual Basic tramite l'oggetto WinHTTP. Per altre informazioni e descrizioni delle singole funzioni, vedere le informazioni di riferimento sulle funzioni WinHTTP per il linguaggio specifico.

A partire da Windows 8, WinHTTP fornisce API per abilitare le connessioni usando il protocollo WebSocketl, ad esempio WinHttpWebSocketSend e WinHttpWebSocketReceive.

Attenzione

WinHTTP non è rientrante tranne che durante la callback di completamento asincrona. Ovvero, mentre un thread ha una chiamata in sospeso a una delle funzioni WinHTTP, ad esempio WinHttpSendRequest, WinHttpReceiveResponse, WinHttpQueryDataAvailable, WinHttpSendData o WinHttpWriteData, non deve mai chiamare WinHTTP una seconda volta fino al completamento della prima chiamata. Un caso in cui potrebbe verificarsi una seconda chiamata è il seguente: se un'applicazione accoda una chiamata di procedura asincrona (APC) al thread che effettua una chiamata a WinHTTP e se WinHTTP esegue internamente un'attesa in stato di allerta, l'APC può essere eseguita. Se la routine APC finisce anche per chiamare WinHTTP, rientra nell'API di WinHTTP e lo stato interno di WinHTTP può corrompersi.

Funzionalità di WinHTTP 5.1

Le funzionalità seguenti sono state aggiunte nella versione 5.1 di WinHTTP:

  • Supporto IPv6.
  • Funzionalità di AutoProxy.
  • Protocollo HTTP/1.0, incluso il supporto per connessioni keep-alive (persistenti) e cookie di sessione.
  • Supporto del trasferimento in blocchi HTTP/1.1 per le risposte HTTP.
  • Pooling delle connessioni anonime persistenti tra le sessioni.
  • Funzionalità SSL (Secure Sockets Layer), inclusi i certificati client. I protocolli SSL supportati includono: SSL 2.0, SSL 3.0 e Transport Layer Security (TLS) 1.0.
  • Supporto per l'autenticazione server e proxy, incluso il supporto integrato per Microsoft Passport 1.4 e il pacchetto Negotiate/Kerberos.
  • Gestione automatica dei reindirizzamenti a meno che non venga eliminata.
  • Interfaccia scriptabile oltre all'API.
  • Utilità di tracciamento per la risoluzione dei problemi.

Alcune funzionalità di WinINet non sono supportate in WinHTTP, tra cui la memorizzazione nella cache degli URL e i cookie persistenti, la reimpostazione automatica, il supporto offline e FTP (File Transfer Protocol).

Per altre informazioni sulle modifiche introdotte nella versione 5.1, vedere Novità di WinHTTP 5.1.

Introduzione a WinHTTP

Per altre informazioni su WinHTTP, vedere gli argomenti seguenti.