Media-Type Verhandlungen
Viele Anwendungsschicht-Internetprotokolle 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 stammt, wird es heute von einer Vielzahl von Anwendungen verwendet, um sich gegenseitig verstandene Datenformate als MIME- oder Medientypen anzugeben. Der Prozess wird Medientyp-Aushandlungbezeichnet.
Medientypen sind einfache Zeichenfolgen, die einen Typ und Untertyp kennzeichnen (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 Anforderung für Informationen, gibt an, dass er "image/gif" oder "image/jpeg" Medientypen anfordert, auf die ein Webserver antwortet, indem er den entsprechenden Medientyp zurückgibt und, wenn der Aufruf eine Anforderung für Daten war, die Daten selbst im angeforderten Format.
Die Medientypverhandlung ähnelt häufig der Aushandlung vorhandener Desktopanwendungen mit der Systemablage, um zu bestimmen, welches Datenformat eingefügt werden soll, wenn ein Benutzer "Bearbeiten/Einfügen" oder Abfragen für Formate auswäht, wenn während eines Drag-and-Drop-Vorgangs ein IDataObject Zeiger empfangen wird. Der subtile Unterschied bei der HTTP-Medientypaushandlung besteht darin, dass der Client vorab nicht weiß, welche Formate der Server verfügbar ist. Daher gibt der Client die unterstützten Medientypen in der Reihenfolge der größtmöglichen Genauigkeit an, und der Server antwortet mit dem besten verfügbaren Format.
URL-Moniker unterstützen die Medientyp-Aushandlung 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. Die 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 Medientypen werden durch FORMATETC Strukturen dargestellt, die vom IEnumFORMATETC Enumerator registriert wurden, der vom Aufrufer im Bindungskontext registriert wurde: Jedes FORMATETC- 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 Zwischenablageformat auf den speziellen Medientyp CF_NULL festlegen, um anzugeben, dass der Standardmedientyp der Ressource, auf die die URL verweist, abgerufen werden soll. Dieses Format ist in der Regel der letzte, an dem der Kunde interessiert ist. Wenn kein Enumerator im 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 über die Wahl über das argument pformatetc für seine IBindStatusCallback::OnDataAvailable-Methode benachrichtigt. Der Rückruf erfolgt im Kontext des Clientaufrufs an BindToStorage.
Anmerkung
Wenn empfangene Inhalte einen unbekannten Medientyp aufweisen, ruft der Client automatisch RegisterMediaTypes auf, um den neuen Typ zu registrieren.
Verwandte Themen