WinINet versus WinHTTP

Met enkele uitzonderingen is WinINet- een superset van WinHTTP-. Bij de keuze tussen beide moet u WinINet gebruiken, tenzij u van plan bent het uit te voeren binnen een service of serviceachtig proces waarvoor impersonatie en sessie-isolatie vereist zijn.

Vergelijking van functies

Functie WinINet WinHTTP
referentiecache. Hiermee kunnen alle ingebouwde toepassingen in Windows Internet Explorer automatisch referenties ophalen. Ook kan een toepassing die buiten Internet Explorer wordt uitgevoerd, de referenties voor de server slechts één keer vragen/opgeven. Van dan af aan zijn de aanvragen automatisch. ja Nee
Prompt voor aanmeldingsgegevens. Biedt een API waarmee de aanroepende code de gebruiker om referenties kan vragen. ja Nee
FTP ja Nee
Autodial/RAS-ondersteuning. Dit is verouderde functionaliteit. Gebruik in plaats daarvan Externe toegang. ja Nee
Zones. Automatische integratie met Internet Explorer-beveiligingszones. ja Nee
IDNA-ondersteuning. Geïntegreerde ondersteuning voor de IDNA RFC/Punycode. ja ja
Cookie Jar API's. Permanente en niet-permanente cookies worden ondersteund. Elke toepassing of elk script kan dit gebruiken om dezelfde cookies te zien als de browser. ja Nee
Beveiligde modus IE ondersteunen ja Nee
Decompressie ondersteunen. Ondersteuning voor gzip en deflate compressieschema. ja ja
ondersteuning voor gesegmenteerde uploads. Clientcode moet de segmentering uitvoeren. Nee ja
SOCKS4 (SOCKS versie 4) ondersteunen. Bevat geen v4a. ja Nee
SOCKS5 (SOCKS versie 5) ondersteunen Nee Nee
bidirectioneel verzenden en ontvangen Nee Nee
Overlappende I/O Nee Nee
ondersteuning voor bestandsschema's. Handig voor proxyscripts met een bestandsschema. ja Nee
InternetOpenUrl-. Vereenvoudigde code om een URL te openen. ja Nee
Ondersteuning voor services. Kan worden uitgevoerd vanuit een service of een serviceaccount. Nee ja
sessieisolatie. Afzonderlijke sessies hebben geen invloed op elkaar. Nee ja
imitatie. Ondersteunt dat het wordt aangeroepen terwijl de thread zich voordoet als een andere gebruiker. Nee ja

Handleiding voor snelle beslissingen

Gebruik dit stroomdiagram om de juiste HTTP-clientstack te selecteren:

  1. Wordt uw code uitgevoerd in een Windows-service, een systeemproces of onder een andere gebruikersidentiteit?
    • Ja → WinHTTP gebruiken.
  2. Is uw code bedoeld voor een desktoptoepassing die de proxy-instellingen van Internet Options (IE), cookies of aanmeldingsprompts van de gebruiker nodig heeft?
    • Ja → WinINet gebruiken.
  3. Schrijft u een moderne C++-desktop of UWP/WinUI-app?
  4. Schrijft u een .NET toepassing?
    • Ja → System.Net.Http.HttpClient gebruiken.
  5. Hebt u platformoverschrijdende compatibiliteit nodig?
    • Ja → Libcurl of een vergelijkbare draagbare bibliotheek gebruiken.

Note

Wanneer u noch WinINet noch WinHTTP moet gebruiken — Als u een nieuwe toepassing ontwikkelt en geen verouderde Win32-integratie nodig hebt, kies dan bij voorkeur voor de moderne alternatieven die hierboven worden genoemd. Ze bieden eenvoudigere API's en betere asynchrone ondersteuning. Sommige alternatieven bieden ook extra voordelen: libcurl en .NET HttpClient zijn platformoverschrijdend; De beschikbaarheid van TLS 1.3 is afhankelijk van de onderliggende TLS-stack en de configuratie van het besturingssysteem. Reserveer WinHTTP/WinINet voor scenario's waarvoor specifiek Win32-serviceondersteuning, het delen van browserreferenties of uitgebreide proxy-integratie is vereist.

Important

Beveiligingsherinnering : ongeacht welke HTTP-stack u kiest, schakelt u tls-certificaatvalidatie nooit uit in productie. Zowel WinHTTP als WinINet staat het negeren van certificaatfouten toe via vlaggen, maar hierdoor wordt uw toepassing blootgesteld aan man-in-the-middle-aanvallen.