Media-Type Aushandlung
Viele Internetprotokolle auf Anwendungsebene basieren auf dem Austausch von Nachrichten in einem einfachen, flexiblen Format namens Multipurpose Internet Mail Extensions (MIME). Obwohl MIME als Standard für den Austausch von elektronischen E-Mail-Nachrichten entstanden ist, wird es heute von einer Vielzahl von Anwendungen verwendet, um gegenseitig verstandene Datenformate als MIME- oder Medientypen anzugeben. Der Prozess wird als Medientyp-Aushandlung bezeichnet.
Medientypen sind einfache Zeichenfolgen, die einen Typ und Untertyp angeben (z. B. "text/plain" oder "text/HTML"). Sie werden verwendet, um Daten zu bezeichnen oder eine Anforderung zu qualifizieren. Ein Webbrowser, z. B. als Teil einer HTTP-Anforderung für Daten oder einer Anforderung für Informationen, gibt an, dass er die Medientypen "image/gif" oder "image/jpeg" anfordert, auf die ein Webserver antwortet, indem er den entsprechenden Medientyp und, wenn der Aufruf eine Anforderung für Daten war, die Daten selbst im angeforderten Format zurückgibt.
Die Aushandlung des Medientyps ähnelt häufig der Aushandlung vorhandener Desktopanwendungen mit der Systemablage, um zu bestimmen, welches Datenformat eingefügt werden soll, wenn ein Benutzer Beim Empfangen eines IDataObject-Zeigers während eines Drag-and-Drop-Vorgangs die Option Bearbeiten/Einfügen oder Abfragen nach Formaten angibt. Der geringfügige Unterschied bei der Aushandlung von HTTP-Medientypen besteht darin, dass der Client nicht im Voraus weiß, welche Formate auf dem Server verfügbar sind. Daher gibt der Client im Voraus die unterstützten Medientypen in der Reihenfolge der höchsten Genauigkeit an, und der Server antwortet mit dem besten verfügbaren Format.
URL-Moniker unterstützen die Medientypaushandlung als Möglichkeit für Internetclients und -server, formate zu vereinbaren, die beim Herunterladen von Daten in BindToStorage-Vorgängen verwendet werden sollen. Zur Unterstützung der Medientypverhandlung implementiert ein Client die IEnumFORMATETC-Schnittstelle und ruft die RegisterFormatEnumerator-Funktion auf, um sie beim Bindungskontext zu registrieren. Der Formatenumerator listet die Formate auf, die der Client akzeptieren kann. Ein URL-Moniker übersetzt diese Formate bei der Bindung an HTTP-URLs in Medientypen.
Die vom Client angeforderten möglichen Medientypen werden in URL-Monikern durch FORMATETC-Strukturen dargestellt, die über den vom Aufrufer im Bindungskontext registrierten IEnumFORMATETC-Enumerator verfügbar sind: Jedes FORMAT gibt ein Zwischenablageformat an, das den Medientyp identifiziert. Das folgende Codefragment gibt beispielsweise an, dass der Medientyp PostScript ist.
FORMATETC fmtetc;
fmtetc.cfFormat = RegisterClipboardFormat(CF_MIME_POSTSCRIPT);
. . .
Ein Client kann das Format der Zwischenablage auf den speziellen Medientyp CF_NULL festlegen, um anzugeben, dass der Standardmedientyp der Ressource abgerufen werden soll, auf die die URL verweist. Dieses Format ist in der Regel das letzte Format, an dem der Client interessiert ist. Wenn kein Enumerator für den Bindungskontext registriert ist, funktioniert ein URL-Moniker so, als ob ein Enumerator mit einem einzelnen FORMATTC mit cfFormat=CF_NULL verfügbar ist und automatisch den Standardmedientyp heruntergeladen wird.
Unabhängig davon, welcher Medientyp verwendet werden soll, wird der Client mithilfe des pformatetc-Arguments für seine IBindStatusCallback::OnDataAvailable-Methode über die Auswahl benachrichtigt. Der Rückruf erfolgt im Kontext des Aufrufs von BindToStorage durch den Client.
Hinweis
Wenn der empfangene Inhalt einen unbekannten Medientyp aufweist, ruft der Client automatisch RegisterMediaTypes auf, um den neuen Typ zu registrieren.
Zugehörige Themen