Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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.
- WinINet e WinHTTP confronta le due tecnologie per l'accesso a HTTP.
- WinHTTP Versions descrive la cronologia delle versioni di WinHTTP.
- Novità di WinHTTP 5.1 descrive le modifiche e le nuove funzionalità in WinHTTP 5.1.
- La terminologia di rete descrive concetti e terminologia utili relativi alla rete in generale e al protocollo HTTP in particolare.
- La scelta di un'interfaccia WinHTTP descrive l'API C/C++ e l'interfaccia COM per WinHTTP.
- Le considerazioni sulla sicurezza di WinHTTP descrivono i problemi di sicurezza da tenere presenti quando si usa WinHTTP.
- Conversione di applicazioni WinINet in WinHTTP descrive come modificare le applicazioni WinINet esistenti per usare l'API WinHTTP.