次の方法で共有


Media-Type ネゴシエーション

多くのアプリケーション層インターネット プロトコルは、多目的インターネット メール拡張機能 (MIME) と呼ばれるシンプルで柔軟な形式でメッセージを交換するために使用されます。 MIME は電子メール メッセージを交換するための標準として使用されていますが、現在、さまざまなアプリケーションで、相互に認識されるデータ形式を MIME またはメディアの種類として指定するために使用されています。 このプロセスは、メディア型ネゴシエーション 呼び出されます。

メディア型は、型とサブタイプ ("text/plain" や "text/HTML" など) を表す単純な文字列です。 これらは、データにラベルを付けたり、要求を修飾したりするために使用されます。 たとえば、WEB ブラウザーは、HTTP 要求データまたは情報要求の一部として、"image/gif" または "image/jpeg" メディアの種類を要求することを指定します。このメディアの種類は、Web サーバーが適切なメディアの種類を返すことによって応答し、呼び出しが要求されたデータの場合は、要求された形式のデータ自体になります。

メディア型ネゴシエーションは、多くの場合、既存のデスクトップ アプリケーションがシステム クリップボードとネゴシエートして、ユーザーが [編集]、[貼り付け] を選択したときに貼り付けるデータ形式、またはドラッグ アンド ドロップ操作中に IDataObjectポインターを受け取ったときに形式を照会する方法を決定する方法と似ています。 HTTP メディアタイプネゴシエーションの微妙な違いは、クライアントがサーバーが使用可能なフォーマットを事前に知らないということです。 そのため、クライアントは、サポートするメディアの種類を最も忠実度の高い順に事前に指定し、サーバーは使用可能な最適な形式で応答します。

URL モニカーは、インターネット クライアントとサーバーが BindToStorage操作でデータをダウンロードするときに使用する形式に同意する方法として、メディアタイプネゴシエーションサポートしています。 メディア型ネゴシエーションをサポートするために、クライアントは IEnumFORMATETC インターフェイスを実装し、RegisterFormatEnumerator 関数を呼び出してバインド コンテキストに登録します。 書式列挙子には、クライアントが受け入れることができる形式が一覧表示されます。 URL モニカーは、HTTP URL にバインドするときに、これらの形式をメディアの種類に変換します。

クライアントによって要求される可能性のあるメディアの種類は、バインド コンテキストで呼び出し元によって登録された IEnumFORMATETC 列挙子から使用できる FORMATETC 構造体を介して URL モニカーに表されます。各 FORMATETC は、メディアの種類を識別するクリップボード形式を指定します。 たとえば、次のコード フラグメントは、メディアの種類が PostScript であることを指定します。

FORMATETC fmtetc;
fmtetc.cfFormat = RegisterClipboardFormat(CF_MIME_POSTSCRIPT);
. . .

クライアントは、クリップボードの形式を特殊なメディアの種類CF_NULLに設定して、URL が指すリソースの既定のメディアの種類を取得する必要があることを示すことができます。 通常、この形式は、クライアントが関心を持つ最後の形式です。 バインド コンテキストに列挙子が登録されていない場合、URL モニカーは、cfFormat=CF_NULL を持つ単一の FORMATETC を含む列挙子が使用可能であるかのように動作し、既定のメディアの種類を自動的にダウンロードします。

使用するメディアの種類に関係なく、クライアントは、IBindStatusCallback::OnDataAvailable メソッドの pformatetc 引数を使用して、選択を通知されます。 コールバックは、BindToStorageへのクライアントの呼び出しコンテキスト内で発生します。

手記

受信したコンテンツが認識できないメディアタイプの場合、クライアントは自動的に RegisterMediaTypes を呼び出して新しい型を登録します。

 

URL モニカー