WinINet vs. WinHTTP

Dengan beberapa pengecualian, WinINet adalah superset WinHTTP. Saat memilih di antara keduanya, Anda sebaiknya menggunakan WinINet kecuali jika Anda berencana menjalankannya dalam proses layanan atau proses serupa layanan yang memerlukan impersonasi dan isolasi sesi.

Perbandingan fitur

Fitur WinINet WinHTTP
Tembolok kredensial. Memungkinkan semua aplikasi bawaan di Windows Internet Explorer mendapatkan kredensial secara otomatis. Ini juga memungkinkan aplikasi yang berjalan di luar Internet Explorer untuk meminta/menentukan kredensial untuk server hanya sekali. Sejak saat itu permintaan bersifat otomatis. Ya Tidak
Permintaan kredensial. Menyediakan API yang memungkinkan kode panggilan untuk meminta kredensial kepada pengguna. Ya Tidak
FTP Ya Tidak
dukungan Autodial/RAS. Ini adalah fungsionalitas warisan. Gunakan Akses Jarak Jauh sebagai gantinya. Ya Tidak
Zona. Integrasi otomatis dengan zona keamanan Internet Explorer. Ya Tidak
Dukungan IDNA. Dukungan terintegrasi untuk IDNA RFC/Punycode. Ya Ya
API Cookie Jar. Cookie persisten dan non-persisten didukung. Aplikasi atau skrip apa pun dapat menggunakan ini untuk melihat cookie yang sama dengan browser. Ya Tidak
Dukungan untuk Mode Terlindungi IE Ya Tidak
dukungan Dekompresi. Dukungan untuk skema kompresi gzip dan deflate. Ya Ya
dukungan unggahan terpotong. Kode klien harus membagi data menjadi beberapa chunk. Tidak Ya
SOCKS4 (SOCKS versi 4) mendukung. Tidak termasuk v4a. Ya Tidak
SOCKS5 (SOCKS versi 5) mendukung Tidak Tidak
Pengiriman dan penerimaan dua arah Tidak Tidak
I/O yang Tumpang Tindih Tidak Tidak
Dukungan skema file. Berguna untuk skrip proksi yang menggunakan skema file. Ya Tidak
InternetOpenUrl. Kode yang disederhanakan untuk membuka URL. Ya Tidak
Dukungan layanan. Dapat dijalankan melalui layanan atau akun layanan. Tidak Ya
isolasi Sesi. Sesi terpisah tidak berdampak satu sama lain. Tidak Ya
peniruan identitas. Mendukung untuk dipanggil saat thread sedang menjalankan peniruan identitas pengguna lain. Tidak Ya

Panduan keputusan cepat

Gunakan diagram alur ini untuk memilih tumpukan klien HTTP yang tepat:

  1. Apakah kode Anda berjalan di layanan Windows, proses sistem, atau dalam mode penyamaran identitas?
    • Ya → Gunakan WinHTTP.
  2. Apakah kode Anda adalah aplikasi desktop yang memerlukan pengaturan proksi, cookie, atau perintah kredensial Opsi Internet (IE) pengguna?
    • Ya → Gunakan WiniNet.
  3. Apakah Anda menulis desktop C++ modern atau aplikasi UWP/WinUI?
  4. Apakah Anda menulis aplikasi .NET?
    • Ya → Gunakan System.Net.Http.HttpClient.
  5. Apakah Anda memerlukan kompatibilitas lintas platform?
    • Ya → Gunakan libcurl atau pustaka portabel serupa.

Note

Kapan tidak menggunakan WinINet maupun WinHTTP — Jika Anda mengembangkan aplikasi baru dan tidak memerlukan integrasi Win32 legacy, pilih alternatif modern yang tercantum di atas. Mereka menawarkan API yang lebih sederhana dan dukungan asinkron yang lebih baik. Beberapa alternatif juga menawarkan manfaat tambahan: libcurl dan .NET HttpClient adalah lintas platform; Ketersediaan TLS 1.3 tergantung pada tumpukan TLS dan konfigurasi OS yang mendasar. Gunakan WinHTTP/WinINet hanya untuk skenario yang secara khusus memerlukan dukungan layanan Win32, berbagi kredensial dengan browser, atau integrasi proksi yang mendalam.

Important

Pengingat keamanan — Terlepas dari tumpukan HTTP mana yang Anda pilih, jangan pernah nonaktifkan validasi sertifikat TLS dalam produksi. WinHTTP dan WinINet memungkinkan pengabaian kesalahan sertifikat melalui flag, tetapi tindakan tersebut membuat aplikasi Anda rentan terhadap serangan man-in-the-middle.