Bagikan melalui


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 pada 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 pendekodean konten, aplikasi menetapkan opsi pendekodean yang meminta WinINet melakukan pendekodean atas nama mereka. Namun, mengaktifkan pendekodean tidak menjamin bahwa WinINet akan melakukan pendekodean konten, dan aplikasi harus siap untuk menangani pendekodean. WinINet menghapus header pengodean konten dari respons saat pendekodean konten berhasil dilakukan. Aplikasi diharapkan untuk menangani pendekodean konten terlepas dari apakah opsi pendekodean diaktifkan atau dinonaktifkan saat header pengodean konten ada dalam respons.

Saat pendekodean 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 pendekodean konten saat opsi diaktifkan:

  • Header Accept-Encoding harus ada dalam permintaan, dan harus menentukan skema pengodean gzip, deflate, atau gzip dan deflate.
  • Skema pengodean yang ditentukan di 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 Rentang Konten tidak boleh ada dalam respons.

Mengatur Opsi Dekompresi

Opsi pendekodean dapat diatur pada handel sesi, handel permintaan, atau handel koneksi. Handel tempat opsi pendekodean diatur, menentukan cakupan opsi pendekodean. Misalnya, mengatur pendekodean pada sesi akan memungkinkan pendekodean semua koneksi dan permintaan yang dibuat di bawah handel tersebut.

Untuk mengatur opsi pendekodean, aplikasi memanggil InternetSetOption dengan handel 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 true. Untuk menonaktifkan pendekodean, aplikasi memanggil InternetSetOption dengan opsi INTERNET_OPTION_HTTP_DECODING dan variabel boolean diatur ke false.

Ketika opsi pendekodean diatur, WinINet melakukan pendekodean pada permintaan saat aplikasi memanggil InternetReadFile. Jika WinINet mengalami kesalahan saat melakukan pendekodean konten, panggilan ke InternetReadFile gagal dengan ERROR_INTERNET_DECODING_FAILED. Ketika pendekodean 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 dan kemudian mengirim ulang permintaan. Jika opsi pendekodean diatur ke false, aplikasi harus memeriksa header Content-Encoding dan melakukan decoding apa pun di tingkat aplikasi.

Catatan

WinINet tidak mendukung implementasi server. Selain itu, itu tidak boleh digunakan dari layanan. Untuk implementasi atau layanan server, gunakan Microsoft Windows HTTP Services (WinHTTP).