Apa yang Baru di WinHTTP 5.1

Topik ini menjelaskan perbedaan paling penting antara WinHTTP versi 5.1 dan versi 5.0. Banyak dari perbedaan ini memerlukan perubahan kode dalam aplikasi yang bermigrasi dari versi 5.0 ke versi 5.1. Beberapa fitur dalam versi 5.1 hanya tersedia mulai dari Windows Server 2003 dan Windows XP dengan Paket Layanan 2 (SP2), terutama fitur yang terkait dengan peningkatan keamanan klien terhadap server Web berbahaya.

Penting

Dengan rilis WinHTTP Versi 5.1, unduhan WinHTTP 5.0 tidak lagi tersedia. Mulai 1 Oktober 2004, Microsoft telah menghapus unduhan WinHTTP 5.0 SDK dari MSDN dan telah menghentikan dukungan produk untuk versi 5.0.

 

Perubahan Nama DLL

Nama DLL WinHTTP 5.1 baru Winhttp.dll, sedangkan nama WINHTTP 5.0 DLL Winhttp5.dll.

WinHTTP 5.0 dan 5.1 dapat hidup berdampingan pada sistem yang sama; WinHTTP 5.1 tidak mengganti, atau menginstal lebih dari, WinHTTP 5.0.

Redistribusi

WinHTTP 5.1 hanya tersedia dengan Windows Server 2003, Windows 2000 Professional dengan Paket Layanan 3 (SP3), Windows XP dengan Paket Layanan 1 (SP1), dan sistem operasi yang lebih baru. File modul gabungan yang dapat didistribusikan ulang (.msm) tidak tersedia untuk WinHTTP 5.1.

WinHttpRequest ProgID

ProgID komponen WinHttpRequest telah berubah dari "WinHttp.WinHttpRequest.5" menjadi "WinHttp.WinHttpRequest.5.1". CLSID dari kelas WinHttpRequest juga telah berubah.

Perubahan Perilaku Panggilan Balik Asinkron

Saat memanggil fungsi WinHttpWriteData, WinHttpQueryDataAvailable dan WinHttpReadData dalam mode asinkron, jangan mengandalkan parameter lpdwNumberOfBytesWritten, lpdwNumberOfBytesAvailable, dan lpdwNumberOfBytesRead OUT yang akan diatur. Jika panggilan fungsi selesai secara asinkron, WinHTTP tidak menulis ke pointer ini yang disediakan oleh kode aplikasi. Sebagai gantinya, aplikasi harus mengambil nilai-nilai ini menggunakan parameter lpvStatusInformation dan dwStatusInformationLength ke fungsi panggilan balik.

Perubahan pada Pengaturan Default

Perubahan pada pengaturan default meliputi:

  • Verifikasi sertifikat server SSL diaktifkan secara default di WinHTTP 5.1. WinHTTP 5.0 tidak menangani kegagalan yang ditemui saat memvalidasi sertifikat server sebagai kesalahan fatal; mereka dilaporkan ke aplikasi menggunakan pemberitahuan panggilan balik SECURE_FAILURE , tetapi tidak menyebabkan permintaan dibatalkan. WinHTTP 5.1, atau, menangani kegagalan validasi sertifikat server sebagai kesalahan fatal yang membatalkan permintaan. Aplikasi dapat menginstruksikan WinHTTP untuk mengabaikan subset kecil kesalahan sertifikat seperti CA yang tidak diketahui, tanggal sertifikat yang tidak valid/kedaluwarsa, atau nama subjek sertifikat yang tidak valid, menggunakan opsi WINHTTP_OPTION_SECURITY_FLAGS .
  • Dukungan autentikasi paspor dinonaktifkan secara default di WinHTTP 5.1. Dukungan paspor dapat diaktifkan dengan opsi WINHTTP_OPTION_CONFIGURE_PASSPORT_AUTH . Pencarian kredensial Paspor Otomatis di Keyring juga dinonaktifkan secara default.
  • Perubahan perilaku pengalihan: Pengalihan HTTP dari https aman: URL ke http reguler : URL tidak lagi diikuti secara otomatis secara default karena alasan keamanan. Ada opsi baru, WINHTTP_OPTION_REDIRECT_POLICY, untuk mengganti perilaku pengalihan default di WinHTTP 5.1. Dengan komponen WinHttpRequest COM, gunakan opsi WinHttpRequestOption_EnableHttpsToHttpRedirects baru untuk mengaktifkan pengalihan dari https: ke http: URL.
  • Saat file pelacakan WinHTTP dibuat, akses dibatasi dengan ACL sehingga hanya administrator yang dapat membaca atau menulis file. Akun pengguna tempat tracefile dibuat juga dapat memodifikasi ACL untuk memberi orang lain akses. Perlindungan ini hanya tersedia pada sistem file yang mendukung keamanan; yaitu, NTFS, bukan FAT32).
  • Dimulai dengan Windows Server 2003 dan Windows XP dengan SP2, mengirim permintaan ke port non-HTTP terkenal berikut dibatasi karena alasan keamanan: 21 (FTP), 25 (SMTP), 70 (GOPHER), 110 (POP3), 119 (NNTP), 143 (IMAP).
  • Dimulai dengan Windows Server 2003, dan Windows XP dengan SP2, jumlah maksimum data header yang diterima WinHTTP dalam respons HTTP adalah 64K, secara default. Jika respons HTTP server berisi lebih banyak 64K dari total data header, WinHTTP gagal dalam permintaan dengan kesalahan ERROR_WINHTTP_INVALID_SERVER_RESPONSE . Batas 64K ini dapat ditimpa menggunakan opsi WINHTTP_OPTION_MAX_RESPONSE_HEADER_SIZE baru.

Dukungan IPv6

WinHTTP 5.1 menambahkan dukungan untuk Protokol Internet Versi 6 (IPv6). WinHTTP dapat mengirim permintaan HTTP ke server yang nama DNS-nya diselesaikan ke alamat IPv6, dan dimulai dengan Windows Server 2003 dan Windows XP dengan SP2, WinHTTP juga mendukung alamat harfiah IPv6.

Opsi Baru di API C/C++ untuk WinHTTP

WinHTTP 5.1 mengimplementasikan opsi baru berikut ini:

"\#define WINHTTP\_OPTION\_PASSPORT\_SIGN\_OUT 86" "\#define WINHTTP\_OPTION\_PASSPORT\_RETURN\_URL 87" "\#define WINHTTP\_OPTION\_REDIRECT\_POLICY 88"

Dimulai dengan Windows Server 2003 dan Windows XP dengan SP2, WinHTTP 5.1 mengimplementasikan opsi baru berikut ini. Pada Windows 2000 Professional dengan SP3 atau Windows XP dengan SP1, namun, panggilan ke WinHttpSetOption atau WinHttpQueryOption dengan ID opsi ini gagal:

"\#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"

Opsi Baru di Komponen WinHttpRequest 5.1

Komponen WinHttpRequest 5.1 mengimplementasikan opsi baru berikut ini:

"WinHttpRequestOption\_RevertImpersonationOverSsl" "WinHttpRequestOption\_EnableHttpsToHttpRedirects" "WinHttpRequestOption\_EnablePassportAuthentication"

Opsi WinHttpRequest 5.1 baru berikut ini tersedia dimulai dengan Windows Server 2003 dan Windows XP dengan SP2:

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

Proksi Tidak Tepercaya Saat Keamanan Masuk Otomatis Diatur ke Tinggi

Di WinHTTP 5.0, server proksi selalu dipercaya untuk masuk otomatis. Ini tidak lagi valid untuk WinHTTP 5.1 yang berjalan di Windows Server 2003 dan Windows XP dengan SP2 ketika opsi kebijakan WINHTTP_AUTOLOGON_SECURITY_LEVEL_HIGH diatur.

Web Proxy Auto-Discovery (AutoProxy) API

Untuk memudahkan konfigurasi pengaturan proksi untuk aplikasi berbasis WinHTTP, WinHTTP sekarang menerapkan protokol Web Proxy Auto-Discovery (WPAD), juga disebut sebagai autoproksi. Ini adalah protokol yang sama dengan browser web, seperti Internet Explorer, menerapkan untuk menemukan konfigurasi proksi secara otomatis tanpa memerlukan pengguna akhir untuk menentukan server proksi secara manual. Untuk mendukung proksi otomatis, WinHTTP 5.1 mengimplementasikan fungsi C/C++ baru, WinHttpGetProxyForUrl, ditambah dua fungsi pendukung, WinHttpDetectAutoProxyConfigUrl dan WinHttpGetIEProxyConfigForCurrentUser.

Masalah Umum

Masalah berikut diketahui ada di WinHTTP 5.1 pada Windows 2000 Professional dengan SP3 dan Windows XP dengan SP1. Masalah ini diselesaikan untuk WinHTTP yang dimulai dengan Windows Server 2003 dan Windows XP dengan SP2:

  • Jika aplikasi menggunakan fungsi WinHttpSetTimeouts atau metode SetTimeouts pada komponen WinHttpRequest untuk mengatur batas waktu penyelesaian DNS yang tidak terbatas seperti parameter dwResolveTimeout , kebocoran handel utas terjadi setiap kali WinHTTP menyelesaikan nama DNS. Atas sejumlah besar permintaan HTTP, ini menyebabkan kebocoran memori yang signifikan. Solusinya adalah membiarkan pengaturan batas waktu penyelesaian tak terbatas default tidak berubah (nilai 0 menentukan batas waktu tak terbatas). Ini sangat disarankan dalam hal apa pun karena mendukung batas waktu pada resolusi nama DNS di WinHTTP mahal dalam hal performa. Untuk Windows 2000 dan yang lebih baru, mengatur batas waktu penyelesaian DNS di WinHTTP tidak perlu karena layanan klien DNS yang mendasarinya menerapkan batas waktu penyelesaiannya sendiri.
  • Saat memproses permintaan asinkron, WinHTTP tidak menangani peniruan utas dengan benar. Ini menyebabkan permintaan yang mengharuskan autentikasi NTLM/Negosiasi gagal, kecuali kredensial secara eksplisit diberikan menggunakan fungsi WinHttpSetCredentials atau WinHttpSetOption .