Novità di WinHTTP 5.1
Questo argomento descrive le differenze più importanti tra WinHTTP versione 5.1 e 5.0. Molte di queste differenze richiedono modifiche al codice nelle applicazioni che eseguono la migrazione dalla versione 5.0 alla versione 5.1. Alcune delle funzionalità della versione 5.1 sono disponibili solo a partire da Windows Server 2003 e Windows XP con Service Pack 2 (SP2), in particolare funzionalità correlate al miglioramento della sicurezza del client da server Web dannosi.
Importante
Con la versione di WinHTTP versione 5.1, il download di WinHTTP 5.0 non è più disponibile. A partire dal 1° ottobre 2004, Microsoft ha rimosso il download di WinHTTP 5.0 SDK e ha terminato il supporto del prodotto per la versione 5.0.
Modifica nome DLL
Il nome della nuova DLL WinHTTP 5.1 è Winhttp.dll, mentre il nome della DLL WinHTTP 5.0 è Winhttp5.dll.
WinHTTP 5.0 e 5.1 possono coesistere nello stesso sistema; WinHTTP 5.1 non sostituisce o installa su WinHTTP 5.0.
Ridistribuzione
WinHTTP 5.1 è disponibile solo con Windows Server 2003, Windows 2000 Professional con Service Pack 3 (SP3), Windows XP con Service Pack 1 (SP1) e sistemi operativi successivi. Un file di modulo merge ridistribuibile (msm) non è disponibile per WinHTTP 5.1.
WinHttpRequest ProgID
Il ProgID del componente WinHttpRequest è cambiato da "WinHttp.WinHttpRequest.5" a "WinHttp.WinHttpRequest.5.1". Anche il CLSID della classe WinHttpRequest è stato modificato.
Modifica del comportamento del callback asincrono
Quando si chiamano le funzioni WinHttpWriteData, WinHttpQueryDataAvailable e WinHttpReadData in modalità asincrona, non si basano sui rispettivi parametri lpdwNumberOfBytesWritten, lpdwNumberOfBytesAvailable e lpdwNumberOfBytesRead OUT da impostare. Se la chiamata di funzione viene completata in modo asincrono, WinHTTP non scrive in questi puntatori forniti dal codice dell'applicazione. L'applicazione deve invece recuperare questi valori usando i parametri lpvStatusInformation e dwStatusInformationLength alla funzione di callback.
Modifiche alle impostazioni predefinite
Le modifiche alle impostazioni predefinite includono:
- La verifica del certificato del server SSL è abilitata per impostazione predefinita in WinHTTP 5.1. WinHTTP 5.0 non gestisce gli errori riscontrati durante la convalida del certificato del server come errori irreversibili; vengono segnalati all'applicazione usando una notifica di callback SECURE_FAILURE , ma non causa l'interruzione della richiesta. WinHTTP 5.1, in alternativa, gestisce gli errori di convalida del certificato del server come errori irreversibili che interrompino la richiesta. L'applicazione può indicare a WinHTTP di ignorare un piccolo subset di errori del certificato, ad esempio ca sconosciuta, data del certificato non valido o nome soggetto del certificato non valido, usando l'opzione WINHTTP_OPTION_SECURITY_FLAGS .
- Il supporto dell'autenticazione Passport è disabilitato per impostazione predefinita in WinHTTP 5.1. Il supporto passport può essere abilitato con l'opzione WINHTTP_OPTION_CONFIGURE_PASSPORT_AUTH . Anche la ricerca automatica delle credenziali passport in Keyring è disabilitata per impostazione predefinita.
- Modifica del comportamento di reindirizzamento: i reindirizzamenti HTTP da un https sicuro : URL a un http normale : l'URL non viene più seguito automaticamente per impostazione predefinita per motivi di sicurezza. È disponibile una nuova opzione, WINHTTP_OPTION_REDIRECT_POLICY, per eseguire l'override del comportamento di reindirizzamento predefinito in WinHTTP 5.1. Con il componente COM WinHttpRequest usare la nuova opzione WinHttpRequestOption_EnableHttpsToHttpRedirects per abilitare i reindirizzamenti da https: a http: URL.
- Quando viene creato un file di traccia WinHTTP, l'accesso è limitato con un elenco di controllo di accesso in modo che solo gli amministratori possano leggere o scrivere il file. L'account utente in cui è stato creato il file di traccia può anche modificare l'ACL per concedere ad altri utenti l'accesso. Questa protezione è disponibile solo nei file system che supportano la sicurezza; ovvero NTFS, non FAT32).
- A partire da Windows Server 2003 e Windows XP con SP2, l'invio di richieste alle porte note e non HTTP seguenti è limitato per motivi di sicurezza: 21 (FTP), 25 (SMTP), 70 (GOPHER), 110 (POP3), 119 (NNTP), 143 (IMAP).
- A partire da Windows Server 2003 e Windows XP con SP2, la quantità massima di dati di intestazione accetta winHTTP in una risposta HTTP è 64K, per impostazione predefinita. Se la risposta HTTP del server contiene più di 64.000 dati di intestazione totali, WinHTTP non riesce la richiesta con un errore ERROR_WINHTTP_INVALID_SERVER_RESPONSE . Questo limite di 64K può essere sostituito usando la nuova opzione di WINHTTP_OPTION_MAX_RESPONSE_HEADER_SIZE .
Supporto di IPv6
WinHTTP 5.1 aggiunge il supporto per Il protocollo Internet versione 6 (IPv6). WinHTTP può inviare richieste HTTP a un server il cui nome DNS viene risolto in un indirizzo IPv6 e a partire da Windows Server 2003 e Windows XP con SP2, WinHTTP supporta anche gli indirizzi letterali IPv6.
Nuove opzioni nell'API C/C++ per WinHTTP
WinHTTP 5.1 implementa le nuove opzioni seguenti:
- "\#define WINHTTP\_OPTION\_PASSPORT\_SIGN\_OUT 86" "\#define WINHTTP\_OPTION\_PASSPORT\_RETURN\_URL 87" "\#define WINHTTP\_OPTION\_REDIRECT\_POLICY 88"
A partire da Windows Server 2003 e Windows XP con SP2, WinHTTP 5.1 implementa le nuove opzioni seguenti. In Windows 2000 Professional con SP3 o Windows XP con SP1, tuttavia, le chiamate a WinHttpSetOption o WinHttpQueryOption con questi ID opzione hanno esito negativo:
- "\#define WINHTTP\_OPTION\_RECEIVE\_RESPONSE\_TIMEOUT 7" "\#define WINHTTP\_OPTION\_MAX\_HTTP\_AUTOMATIC\_REDIRECTS 89" "\#define WINHTTP\_OPTION\_MAX\_HTTP\\_HTTP\_STATUS\_CONTINUE 90" "\#define WINHTTP\_OPTION\_MAX\_RESPONSE\_HEADER\_SIZE 91" "\#define WINHTTP\_OPTION\_MAX\_RESPONSE\_DRAIN\_SIZE 92"
Nuove opzioni nel componente WinHttpRequest 5.1
Il componente WinHttpRequest 5.1 implementa le nuove opzioni seguenti:
- "WinHttpRequestOption\_RevertImpersonationOverSsl" "WinHttpRequestOption\_EnableHttpsToHttpRedirects" "WinHttpRequestOption\_EnablePassportAuthentication"
A partire da Windows Server 2003 e Windows XP con SP2 sono disponibili le nuove opzioni WinHttpRequest 5.1 seguenti:
- "WinHttpRequestOption\_MaxAutomaticRedirects" "WinHttpRequestOption\_MaxResponseHeaderSize" "WinHttpRequestOption\_MaxResponseDrainSize" "WinHttpRequestOptions\_EnableHttp1\_1"
I proxy non sono attendibili quando la sicurezza dell'accesso automatico è impostata su Alto
In WinHTTP 5.0 i server proxy sono sempre attendibili per l'accesso automatico. Questa opzione non è più valida per WinHTTP 5.1 in esecuzione in Windows Server 2003 e Windows XP con SP2 quando è impostata l'opzione dei criteri di WINHTTP_AUTOLOGON_SECURITY_LEVEL_HIGH .
API Individuazione automatica proxy Web (AutoProxy)
Per semplificare la configurazione delle impostazioni proxy per le applicazioni basate su WinHTTP, WinHTTP implementa ora il protocollo Web Proxy Auto-Discovery (WPAD), noto anche come autoproxy. Si tratta dello stesso protocollo che i Web browser, ad esempio Internet Explorer, implementano per individuare automaticamente la configurazione proxy senza richiedere a un utente finale di specificare manualmente un server proxy. Per supportare laproxy automatica, WinHTTP 5.1 implementa una nuova funzione C/C++, WinHttpGetProxyForUrl, oltre a due funzioni di supporto, WinHttpDetectAutoProxyConfigUrl e WinHttpGetIEProxyConfigForCurrentUser.
Problemi noti
I problemi seguenti sono noti in WinHTTP 5.1 in Windows 2000 Professional con SP3 e Windows XP con SP1. Questi problemi vengono risolti per WinHTTP a partire da Windows Server 2003 e Windows XP con SP2:
- Se l'applicazione usa la funzione WinHttpSetTimeouts o il metodo SetTimeouts nel componente WinHttpRequest per impostare un timeout di risoluzione DNS non infinito, ad esempio il parametro dwResolveTimeout, si verifica una perdita di handle di thread ogni volta che WinHTTP risolve un nome DNS. In un numero elevato di richieste HTTP, si verifica una perdita di memoria significativa. La soluzione alternativa consiste nell'lasciare invariata l'impostazione predefinita del timeout di risoluzione infinito (il valore 0 specifica un timeout infinito). Questa opzione è fortemente consigliata in ogni caso perché il supporto dei timeout nelle risoluzioni dei nomi DNS in WinHTTP è costoso in termini di prestazioni. Per Windows 2000 e versioni successive, l'impostazione di un timeout di risoluzione DNS in WinHTTP non è necessaria perché il servizio client DNS sottostante implementa il proprio timeout di risoluzione.
- Quando si elaborano richieste asincrone, WinHTTP non gestisce correttamente la rappresentazione del thread. In questo modo, le richieste che richiedono l'autenticazione NTLM/Negotiate hanno esito negativo, a meno che le credenziali non vengano fornite in modo esplicito tramite le funzioni WinHttpSetCredentials o WinHttpSetOption.