Negosiasi Jenis Media

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 bagaimana 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 penunjuk IDataObject 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 operasi BindToStorage. Untuk mendukung negosiasi jenis media, klien mengimplementasikan antarmuka IEnumFORMATETC dan memanggil fungsi RegisterFormatEnumerator untuk mendaftarkannya dengan konteks pengikatan. 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 struktur FORMATETC yang tersedia dari enumerator IEnumFORMATETC 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 pengikatan, 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 metode IBindStatusCallback::OnDataAvailable. Panggilan balik terjadi dalam konteks panggilan klien ke BindToStorage.

Catatan

Jika konten yang diterima adalah jenis media yang tidak dikenal, klien secara otomatis memanggil RegisterMediaTypes untuk mendaftarkan jenis baru.

 

Moniker URL