Pengodean Konten
Seperti yang ditentukan dalam aplikasi protokol HTTP (RFC 2616) dapat meminta agar server mengembalikan respons HTTP dalam format yang dikodekan. Sebelum Windows Server 2008 dan Windows Vista, permintaan dengan pengodean konten dikirim ke aplikasi untuk diproses di tingkat mereka. Mulai Windows Server 2008 dan Windows Vista, aplikasi dapat mengarahkan WinINet untuk melakukan decoding konten untuk skema pengodean konten gzip dan deflate.
Untuk mengaktifkan decoding konten, aplikasi mengatur opsi decoding yang meminta WinINet melakukan decoding atas nama mereka. Namun, mengaktifkan decoding tidak menjamin bahwa WinINet akan melakukan decoding konten, dan aplikasi harus siap untuk menangani decoding. WinINet menghapus header pengodean konten dari respons saat decoding konten berhasil dilakukan. Aplikasi diharapkan untuk menangani decoding konten terlepas dari apakah opsi decoding diaktifkan atau dinonaktifkan saat header pengodean konten ada dalam respons.
Saat decoding diaktifkan, aplikasi harus menentukan daftar pengodean yang didukung di header Accept-Encoding permintaan. Header Accept-Encoding, bagaimanapun, tidak mewajibkan server untuk mengirim respons yang dikodekan. WinINet akan mengirim respons yang tidak cocok dengan daftar pengodean yang dapat diterima kembali ke aplikasi.
Daftar berikut menjelaskan kondisi di mana WinINet akan melakukan decoding konten saat opsi diaktifkan:
- Header Accept-Encoding harus terdapat dalam permintaan dan harus menetapkan skema pengkodean gzip, deflate, atau keduanya, gzip dan deflate.
- Skema pengodean yang ditentukan dalam header Pengodean Konten harus cocok dengan salah satu skema pengodean yang ditentukan di header Accept-Encoding.
- Header Pengodean Konten dalam respons hanya menentukan satu skema pengodean.
- Respons hanya boleh berisi satu header Pengodean Konten. WinINet mendekode konten yang dikodekan hanya dengan satu skema pengodean.
- Header Cache-Control tidak boleh berisi direktif tanpa transformasi.
- Header Content-Range tidak boleh ada dalam respons.
Mengatur Opsi Dekompresi
Opsi dekoding dapat diatur pada handle sesi, handle permintaan, atau handle koneksi. Handle tempat opsi decoding diatur, menentukan ruang lingkup opsi decoding. Misalnya, mengatur decoding pada sesi akan memungkinkan decoding atas semua koneksi dan permintaan yang dibuat di bawah pengendali tersebut.
Untuk mengatur opsi decoding, aplikasi memanggil InternetSetOption dengan handle yang dikembalikan dari InternetOpen, InternetConnect, atau HttpOpenRequest. Opsi INTERNET_OPTION_HTTP_DECODING ditentukan dalam parameter dwOption, dan parameter lpBuffer menunjuk ke variabel boolean yang diatur ke benar. Untuk menonaktifkan decoding, aplikasi memanggil InternetSetOption dengan opsi INTERNET_OPTION_HTTP_DECODING dan variabel boolean diatur ke false.
Ketika opsi decoding diatur, WinINet melakukan decoding pada permintaan saat aplikasi memanggil InternetReadFile. Jika WinINet mengalami kesalahan saat melakukan decoding konten, panggilan ke InternetReadFile gagal dengan ERROR_INTERNET_DECODING_FAILED. Saat decoding gagal, aplikasi memiliki dua opsi: aplikasi dapat menghapus header Accept-Encoding dan mengirim ulang permintaan, atau dapat mengatur opsi INTERNET_OPTION_HTTP_DECODING pada permintaan ke false lalu mengirim ulang permintaan. Jika opsi decoding diatur ke false, aplikasi harus memeriksa header Content-Encoding dan melakukan decoding apa pun di tingkat aplikasi.
Nota
WinINet tidak mendukung implementasi server. Selain itu, tidak boleh digunakan melalui layanan. Untuk implementasi atau layanan server, gunakan Microsoft Windows HTTP Services (WinHTTP).