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 provient d’une norme pour l’échange de messages électroniques, il est utilisé aujourd’hui par un large éventail d’applications pour spécifier des formats de données mutuellement compris en tant que MIME, ou média, types. Le processus est appelé négociation de type média.
Les types de supports 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 les données ou request-for-info, spécifie qu’il demande des types de média « 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 mé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 les formats lors de la réception d’un IDataObject pointeur pendant 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 est disponible. Par conséquent, le client spécifie à l’avant-plan les types de supports qu’il prend en charge, dans l’ordre de fidélité le plus grand, et le serveur répond avec le format le plus disponible.
Les monikers d’URL prennent en charge la négociation de type média comme moyen pour les clients et les serveurs Internet d’accepter les formats à utiliser lors du téléchargement de données dans BindToStorage opérations. Pour prendre en charge la négociation de type média, un client implémente l’interfaceIEnumFORMATETCet 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 supports possibles demandés par le client sont représentés par les monikers d’URL via structures FORMATETC disponibles à partir du IEnumFORMATETC énumérateur inscrit par l’appelant sur le contexte de liaison : chaque FORMATETC spécifie un format 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 presse-papiers sur le type de média spécial CF_NULL pour indiquer que le type de mé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 dans lequel le client est intéressé. Lorsqu’aucun énumérateur n’est inscrit avec le contexte de liaison, un moniker d’URL fonctionne comme s’il s’agit d’un énumérateur contenant un seul FORMATETC avec cfFormat=CF_NULL est disponible, en téléchargeant automatiquement le type de média par défaut.
Quel que soit le type de média à utiliser, le client est averti 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.
Note
Si le contenu reçu est d’un type multimédia non reconnu, le client appelle automatiquement RegisterMediaTypes pour inscrire le nouveau type.
Rubriques connexes