Condividi tramite


Novità di WinHTTP 5.1

Questo argomento descrive le differenze più importanti tra WinHTTP versione 5.1 e versione 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 rispetto ai server Web dannosi.

Importante

Con la versione di WinHTTP versione 5.1, il download WinHTTP 5.0 non è più disponibile. A partire dal 1 ottobre 2004, Microsoft ha rimosso il download di WinHTTP 5.0 SDK da MSDN e ha terminato il supporto tecnico 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.WinHttp.WinHttpRequest.5.1". Il CLSID della classe WinHttpRequest è stato modificato anche.

Modifica del comportamento del callback asincrona

Quando si chiamano le funzioni WinHttpWriteData, WinHttpQueryDataAvailable e WinHttpReadData in modalità asincrona, non si basano sui rispettivi parametri lpdwNumberOfBytesWritten, lpdwNumberNumberOfBytesAvailable e lpdwNumberOfBytesReadRead OUT da impostare. Se la chiamata alla 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 lpvStatusInformation e dwStatusInformationLength alla funzione di callback.

Modifiche alle impostazioni predefinite

Le modifiche apportate 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 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 annullano 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 valida o nome soggetto certificato non valido, usando l'opzione WINHTTP_OPTION_SECURITY_FLAGS .
  • Il supporto per l'autenticazione passport è disabilitato per impostazione predefinita in WinHTTP 5.1. Il supporto di Passport può essere abilitato con l'opzione WINHTTP_OPTION_CONFIGURE_PASSPORT_AUTH . Per impostazione predefinita, la ricerca automatica delle credenziali passport è disabilitata.
  • Modifica del comportamento di reindirizzamento: il reindirizzamento HTTP da un https sicuro: URL a un http normale : l'URL non viene più seguito automaticamente 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 WINHttpRequest COM, 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 a 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'elenco di controllo di accesso 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 seguenti porte note, non HTTP, è 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 WinHTTP accetta in una risposta HTTP è 64K, per impostazione predefinita. Se la risposta HTTP del server contiene più di 64K dei dati totali dell'intestazione, WinHTTP ha esito negativo sulla richiesta con un errore di ERROR_WINHTTP_INVALID_SERVER_RESPONSE . Questo limite 64K può essere sottoposto a override usando la nuova opzione di WINHTTP_OPTION_MAX_RESPONSE_HEADER_SIZE .

Supporto di IPv6

WinHTTP 5.1 aggiunge il supporto per Internet Protocol 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 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\_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"

Le nuove opzioni WinHttpRequest 5.1 seguenti sono disponibili a partire da Windows Server 2003 e Windows XP con SP2:

"WinHttpRequestOption\_MaxAutomaticRedirects" "WinHttpRequestOption\_MaxResponseHeaderSize" "WinHttpRequestOption\_MaxResponseDrainSize" "WinHttpRequestOptions\_EnableHttp1\_1"

I proxy non sono attendibili quando la sicurezza di 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 l'opzione dei criteri di WINHTTP_AUTOLOGON_SECURITY_LEVEL_HIGH è impostata.

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), definito anche autoproxy. Si tratta dello stesso protocollo che i Web browser, ad esempio Internet Explorer, implementano per individuare automaticamente la configurazione del proxy senza richiedere a un utente finale di specificare manualmente un server proxy. Per supportare autoproxy, 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 , una perdita di handle thread si verifica ogni volta che WinHTTP risolve un nome DNS. In un numero elevato di richieste HTTP, questa causa una perdita di memoria significativa. La soluzione alternativa consiste nel lasciare invariata l'impostazione predefinita di timeout di risoluzione infinita (un valore pari a 0 specifica un timeout infinito). Questa opzione è fortemente consigliata in qualsiasi caso perché supporta i timeout sulle 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 timeout di risoluzione personalizzato.
  • Quando si elaborano richieste asincrone, WinHTTP non gestisce correttamente la rappresentazione del thread. In questo modo, le richieste che richiedono l'autenticazione NTLM/Negotiate non hanno esito negativo, a meno che le credenziali non vengano fornite in modo esplicito usando le funzioni WinHttpSetCredentials o WinHttpSetOption .