媒體類型交涉
許多應用層因特網通訊協定是以簡單且靈活的格式交換訊息為基礎,稱為多用途因特網郵件延伸模組(MIME)。 雖然 MIME 起源於交換電子郵件訊息的標準,但目前由各種不同的應用程式使用,以將相互瞭解的數據格式指定為 MIME 或媒體類型。 此程式稱為 媒體類型交涉。
媒體類型是代表類型和子類型的簡單字串(例如 “text/plain” 或 “text/HTML” )。 它們可用來標記數據或限定要求。 例如,網頁瀏覽器是 HTTP 要求 for-data 或 request-for-info 的一部分,指定它要求 “image/gif” 或 “image/jpeg” 媒體類型,網頁伺服器會傳回適當的媒體類型來響應該類型,如果呼叫是要求數據,則數據本身會以要求的格式。
媒體類型交涉通常類似於現有的傳統型應用程式如何與系統剪貼簿交涉,以決定當使用者在拖放作業期間收到 IDataObject 指標時,選擇 [編輯/貼上] 或查詢格式時要貼上的數據格式。 HTTP 媒體類型交涉的細微差異在於用戶端事先不知道伺服器可用的格式。 因此,用戶端會依最逼真度的順序,指定其支援的媒體類型,而伺服器會以最佳可用格式回應。
URL Monikers 支援媒體類型交涉,以讓因特網用戶端和伺服器同意在 BindTo 中下載數據時所使用的格式 儲存體 作業。 為了支持媒體類型交涉,用戶端會實作 IEnumFORMATETC 介面,並呼叫 RegisterFormatEnumerator 函式來向系結內容註冊它。 格式列舉值會列出用戶端可接受的格式。 當系結至 HTTP URL 時,URL Moniker 會將這些格式轉譯為媒體類型。
用戶端所要求可能的媒體類型會透過系結內容上呼叫端所註冊的 IEnumFORMATETC 列舉值提供的 FORMATETC 結構,以 URL Moniker 表示:每個 FORMATETC 都會指定識別媒體類型的剪貼簿格式。 例如,下列代碼段會指定媒體類型為 PostScript。
FORMATETC fmtetc;
fmtetc.cfFormat = RegisterClipboardFormat(CF_MIME_POSTSCRIPT);
. . .
用戶端可以將剪貼簿格式設定為特殊媒體類型CF_NULL,以指出應該擷取 URL 所指向之資源的預設媒體類型。 此格式通常是用戶端感興趣的最後一個格式。 當未向系結內容註冊任何列舉值時,URL Moniker 的運作方式就如同具有 cfFormat=CF_NULL 的單一 FORMATETC 的列舉值可用,自動下載默認媒體類型。
無論使用何種媒體類型,用戶端都會透過其 IBindStatusCallback::OnDataAvailable 方法上的 pformatetc 自變數來通知選擇。 回呼會在用戶端對 BindTo 的呼叫內容中發生 儲存體。
注意
如果收到的內容是無法辨識的媒體類型,用戶端會自動呼叫 RegisterMediaTypes 來註冊新的類型。
相關主題