WinINet és WinHTTP

Néhány kivételtől eltekintve WinINet a WinHTTP szuperhalmaza. Ha a kettő közül választ, a WinINet kell használnia, kivéve, ha olyan szolgáltatáson vagy szolgáltatásszerű folyamaton szeretne futni, amely megszemélyesítést és munkamenet-elkülönítést igényel.

Funkciók összehasonlítása

Funkció WinINet WinHTTP
hitelesítési adatok gyorsítótára. A Windows Internet Explorerben az összes beépített alkalmazás automatikusan lekérheti a hitelesítő adatokat. Azt is lehetővé teszi, hogy az Internet Exploreren kívül futó alkalmazások csak egyszer kérhessenek/adjanak meg hitelesítő adatokat a kiszolgálóhoz. Ettől kezdve a kérések automatikusak. igen Nem
Hitelesítő adatok kérése. Olyan API-t biztosít, amely lehetővé teszi, hogy a hívó kód hitelesítő adatokat kérjen a felhasználótól. igen Nem
FTP igen Nem
Autodial/RAS-támogatás. Ez régi funkció. Használja inkább a Távoli elérés funkciót. igen Nem
zónák. Automatikus integráció az Internet Explorer biztonsági zónáival. igen Nem
IDNA-támogatás. Az IDNA RFC/Punycode integrált támogatása. igen igen
Cookie Jar API-k. Az állandó és nem állandó cookie-k támogatottak. Bármely alkalmazás vagy szkript használhatja ezt a böngészővel megegyező cookie-k megtekintésére. igen Nem
Az IE védett módjának támogatása igen Nem
dekompressziós támogatás. Gzip és deflate tömörítési séma támogatása. igen igen
a darabolt feltöltés támogatása. A klienskódnak kell elvégeznie a darabolást. Nem igen
SOCKS4 (SOCKS 4-es verzió) támogatja. Nem tartalmazza a v4a-t. igen Nem
SOCKS5 (SOCKS 5-ös verzió) támogatja a Nem Nem
kétirányú küldés és fogadás Nem Nem
átfedésben lévő I/O- Nem Nem
fájlséma támogatása. Fájlsémával rendelkező proxyszkriptekhez hasznos. igen Nem
InternetOpenUrl. Egyszerűsített kód egy URL-cím megnyitásához. igen Nem
Szolgáltatástámogatás. Futtatható szolgáltatásból vagy szolgáltatásfiókból. Nem igen
munkamenet-elkülönítés. A különálló munkamenetek nem befolyásolják egymást. Nem igen
megszemélyesítés. Akkor is meghívható, ha a szál egy másik felhasználót személyesít meg. Nem igen

Gyors döntési útmutató

Ezzel a folyamatábra használatával válassza ki a megfelelő HTTP-ügyfélvermet:

  1. A kódja Windows-szolgáltatásban, rendszerfolyamatban vagy megszemélyesített környezetben fut?
    • Igen → WinHTTP használata.
  2. A kódja egy olyan asztali alkalmazás, amelynek szüksége van a felhasználó Internetbeállítások (IE) proxybeállításaira, cookie-jaira vagy hitelesítőadat-kéréseire?
    • Igen → WinINet használata.
  3. Modern C++ asztali vagy UWP/WinUI-alkalmazást fejleszt?
  4. .NET alkalmazást ír?
    • Igen → a System.Net.Http.HttpClient használatát.
  5. Platformfüggetlen kompatibilitásra van szüksége?
    • Igen, → Használjon libcurl vagy hasonló hordozható tárat.

Note

Mikor érdemes sem a WinINetet, sem a WinHTTP-t használni – Ha új alkalmazást hoz létre, és nem igényel régi Win32-integrációt, válassza a fent felsorolt modern alternatívákat. Egyszerűbb API-kat és jobb aszinkron támogatást nyújtanak. Néhány alternatíva további előnyöket is kínál: a libcurl és .NET HttpClient platformfüggetlen; A TLS 1.3 rendelkezésre állása a mögöttes TLS-veremtől és operációsrendszer-konfigurációtól függ. A WinHTTP/WinINet használatát tartsa fenn azokra az esetekre, amelyek kifejezetten Win32-szolgáltatások támogatását, a böngésző hitelesítő adatainak megosztását vagy a proxyval való mély integrációt igénylik.

Important

Biztonsági emlékeztető – Függetlenül attól, hogy melyik HTTP-vermet választja, soha ne tiltsa le a TLS-tanúsítványok érvényesítését éles környezetben. A WinHTTP és a WinINet egyaránt lehetővé teszi, hogy jelzők használatával figyelmen kívül hagyja a tanúsítványhibákat, de ezzel közbeékelődéses (man-in-the-middle) támadásoknak teszi ki az alkalmazását.