Negosiasi Media-Type
Banyak protokol Internet lapisan aplikasi didasarkan pada pertukaran pesan dalam format sederhana dan fleksibel yang disebut Multipurpose Internet Mail Extensions (MIME). Meskipun MIME berasal sebagai standar untuk bertukar pesan surat elektronik, MIME digunakan saat ini oleh berbagai aplikasi untuk menentukan format data yang saling dipahami sebagai MIME, atau media, jenis. Proses ini disebut negosiasi jenis media.
Jenis media adalah string sederhana yang menunjukkan jenis dan subjenis (seperti "teks/biasa" atau "teks/HTML"). Mereka digunakan untuk memberi label data atau memenuhi syarat permintaan. Browser Web, misalnya, sebagai bagian dari permintaan-untuk-data HTTP atau request-for-info, menentukan bahwa ia meminta Jenis Media "image/gif" atau "image/jpeg", di mana server web merespons dengan mengembalikan jenis media yang sesuai dan, jika panggilan adalah request-for-data, data itu sendiri dalam format yang diminta.
Negosiasi jenis media sering kali mirip dengan cara aplikasi desktop yang ada bernegosiasi dengan clipboard sistem untuk menentukan format data mana yang akan ditempelkan saat pengguna memilih Edit/Tempel atau kueri untuk format saat menerima IDataObject pointer selama operasi seret dan letakkan. Perbedaan halang dalam negosiasi jenis media HTTP adalah bahwa klien tidak tahu sebelumnya format mana yang tersedia server. Oleh karena itu, klien menentukan di muka jenis media yang didukungnya, dalam urutan keakuratan terbesar, dan server merespons dengan format terbaik yang tersedia.
Moniker URL mendukung negosiasi jenis media sebagai cara bagi klien dan server Internet untuk menyetujui format yang akan digunakan saat mengunduh data dalam operasiBindToStorage. Untuk mendukung negosiasi jenis media, klien mengimplementasikan antarmukaIEnumFORMATETCdan memanggil fungsiRegisterFormatEnumerator untuk mendaftarkannya dengan konteks ikat. Enumerator format mencantumkan format yang dapat diterima klien. Moniker URL menerjemahkan format ini ke dalam jenis media saat mengikat URL HTTP.
Kemungkinan jenis media yang diminta oleh klien diwakili ke moniker URL melalui FORMATETC struktur yang tersedia dari IEnumFORMATETC enumerator yang didaftarkan oleh pemanggil pada konteks pengikatan: Setiap FORMATETC menentukan format clipboard yang mengidentifikasi jenis media. Misalnya, fragmen kode berikut menentukan bahwa jenis media adalah PostScript.
FORMATETC fmtetc;
fmtetc.cfFormat = RegisterClipboardFormat(CF_MIME_POSTSCRIPT);
. . .
Klien dapat mengatur format clipboard ke jenis media khusus CF_NULL untuk menunjukkan bahwa jenis media default sumber daya yang ditunjukkan oleh URL harus diambil. Format ini biasanya yang terakhir di mana klien tertarik. Ketika tidak ada enumerator yang terdaftar dengan konteks ikatan, moniker URL berfungsi seolah-olah enumerator yang berisi satu FORMATETC dengan cfFormat=CF_NULL tersedia, secara otomatis mengunduh jenis media default.
Jenis media apa pun yang akan digunakan, klien diberi tahu tentang pilihan dengan argumen pformatetc pada IBindStatusCallback::OnDataAvailable metode. Panggilan balik terjadi dalam konteks panggilan klien ke BindToStorage.
Nota
Jika konten yang diterima adalah jenis media yang tidak dikenal, klien secara otomatis memanggil RegisterMediaTypes untuk mendaftarkan jenis baru.
Topik terkait