Partager via


négociation Media-Type

De nombreux protocoles Internet de couche application sont basés sur l’échange de messages dans un format simple et flexible appelé MIME (Multipurpose Internet Mail Extensions). Bien que MIME soit à l’origine une norme pour l’échange de messages électroniques, il est aujourd’hui utilisé par un large éventail d’applications pour spécifier des formats de données mutuellement compris en tant que types MIME, ou médias. Le processus est appelé négociation de type média.

Les types de médias sont des chaînes simples qui désignent un type et un sous-type (par exemple, « text/plain » ou « text/HTML »). Ils sont utilisés pour étiqueter des données ou qualifier une demande. Un navigateur Web, par exemple, dans le cadre d’une requête HTTP pour des données ou d’une demande d’informations, spécifie qu’il demande des types de médias « image/gif » ou « image/jpeg », auxquels un serveur web répond en retournant le type de média approprié et, si l’appel était une demande de données, les données elles-mêmes au format demandé.

La négociation de type multimédia est souvent similaire à la façon dont les applications de bureau existantes négocient avec le Presse-papiers système pour déterminer le format de données à coller lorsqu’un utilisateur choisit Modifier/Coller ou interroge des formats lors de la réception d’un pointeur IDataObject lors d’une opération de glisser-déplacer. La différence subtile dans la négociation de type multimédia HTTP est que le client ne sait pas à l’avance quels formats le serveur a disponibles. Par conséquent, le client spécifie à l’avance les types de médias qu’il prend en charge, dans l’ordre de fidélité la plus élevée, et le serveur répond avec le meilleur format disponible.

Les monikers d’URL prennent en charge la négociation de type média comme moyen pour les clients et serveurs Internet de convenir des formats à utiliser lors du téléchargement de données dans les opérations BindToStorage . Pour prendre en charge la négociation de type média, un client implémente l’interface IEnumFORMATETC et appelle la fonction RegisterFormatEnumerator pour l’inscrire avec le contexte de liaison. L’énumérateur de format répertorie les formats que le client peut accepter. Un moniker d’URL traduit ces formats en types multimédias lors de la liaison à des URL HTTP.

Les types de médias possibles demandés par le client sont représentés aux monikers d’URL via des structures FORMATETC disponibles à partir de l’énumérateur IEnumFORMATETC inscrit par l’appelant dans le contexte de liaison : chaque FORMATETC spécifie un format de Presse-papiers identifiant le type de média. Par exemple, le fragment de code suivant spécifie que le type de média est PostScript.

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

Un client peut définir le format du Presse-papiers sur le type de média spécial CF_NULL pour indiquer que le type multimédia par défaut de la ressource pointée par l’URL doit être récupéré. Ce format est généralement le dernier qui intéresse le client. Lorsqu’aucun énumérateur n’est inscrit auprès du contexte de liaison, un moniker d’URL fonctionne comme si un énumérateur contenant un format FORMATETC unique avec cfFormat=CF_NULL était disponible, téléchargeant automatiquement le type de support par défaut.

Quel que soit le type de média à utiliser, le client est informé du choix au moyen de l’argument pformatetc sur sa méthode IBindStatusCallback::OnDataAvailable . Le rappel se produit dans le contexte de l’appel du client à BindToStorage.

Notes

Si le contenu reçu est d’un type multimédia non reconnu, le client appelle automatiquement RegisterMediaTypes pour inscrire le nouveau type.

 

Monikers d’URL