Articulo de referencia

Negociación de contenido

En informática , la negociación de contenido se refiere a los mecanismos definidos como parte de HTTP que permiten servir diferentes versiones de un documento (o, más generalmen...

En informática , la negociación de contenido se refiere a los mecanismos definidos como parte de HTTP que permiten servir diferentes versiones de un documento (o, más generalmente, representaciones de un recurso) en la misma URI , de modo que los agentes de usuario puedan especificar qué versión se ajusta mejor a sus capacidades. Un uso clásico de este mecanismo es servir una imagen en formato GIF o PNG , de manera que un navegador que no puede mostrar imágenes PNG (por ejemplo , Internet Explorer 4) reciba la versión GIF.

Un recurso puede estar disponible en varias representaciones diferentes; por ejemplo, en distintos idiomas o formatos multimedia. Una forma de seleccionar la opción más adecuada es proporcionar al usuario una página de índice y dejar que elija la que prefiera; sin embargo, a menudo es posible automatizar la selección en función de ciertos criterios.

Mecanismos

HTTP ofrece varios mecanismos diferentes de negociación de contenido, entre los que se incluyen: impulsados ​​por el servidor (o proactivos), impulsados ​​por el agente (o reactivos), transparentes y/o combinaciones híbridas de los mismos.

Controlado por servidor

La negociación de contenido proactiva o gestionada por el servidor se realiza mediante algoritmos en el servidor que eligen entre las posibles representaciones variantes. Esto suele hacerse en función de los criterios de aceptación proporcionados por el agente de usuario.

En resumen, cuando un agente de usuario envía una solicitud a un servidor, le informa qué tipos de medios u otros aspectos de la presentación del contenido comprende, indicando su grado de comprensión. Más precisamente, el agente de usuario proporciona encabezados HTTP que enumeran los aspectos aceptables del recurso y sus factores de calidad. De esta manera, el servidor puede proporcionar la versión del recurso que mejor se ajuste a las necesidades del agente de usuario.

Por ejemplo, un navegador podría indicar que desea información en alemán configurándolo de Accept-Languageesta manera:

Accept-Language: de

En su lugar, el navegador puede indicar que se prefiere el alemán, si es posible, pero que el inglés también es aceptable mediante la configuración:

Accept-Language: de; q=1.0, en; q=0.5

Donde el factor 'q' (calidad) para el alemán es más alto que el del inglés.

A menudo se proporcionan varios encabezados HTTP de forma conjunta para el formato del contenido o, específicamente, el tipo de medio, el idioma y otros aspectos de un recurso. Además del Acceptencabezado comúnmente utilizado para el tipo de medio, el Accept-Languageencabezado para la negociación del idioma, RFC 7231 también describe Accept-Charsetlos encabezados Accept-Encodingspara las codificaciones de caracteres y las codificaciones de contenido (compresión) respectivamente.

Un ejemplo de una solicitud más compleja es cuando un navegador envía encabezados sobre el idioma indicando que se prefiere el alemán, pero que el inglés es aceptable, como se indicó anteriormente, y que, con respecto a los formatos, se prefiere HTML ( text/html) sobre otros tipos de texto ( ), se prefieren las imágenes text/*GIF ( image/gif) o JPEG ( ) sobre otros formatos de imagen ( ), pero que cualquier otro tipo de medio ( ) se acepta como último recurso:image/jpgimage/**/*

Idioma aceptado: de; q=1.0, en; q=0.5 Aceptar: text/html; q=1.0, text/*; q=0.8, image/gif; q=0.6, image/jpeg; q=0.6, image/*; q=0.5, */*; q=0.1 

Además de los aspectos de negociación de contenido impulsada por el servidor por tipo de contenido y por idioma especificados en RFC 7231, hay extensiones que definen otros aspectos de la negociación de contenido, como Memento , que describe el uso de un Accept-Datetimeencabezado para recuperar la versión de la representación de un recurso en puntos específicos en el tiempo [ 1 ] y la Negociación de contenido por perfil de IETF/W3C [ 2 ] , que describe el uso de un Accept-Profileencabezado para recuperar representaciones de recursos que se ajusten a perfiles de datos.

Ni RFC 7231 ni las especificaciones relacionadas más recientes, como Content Negotiation by Profile [ 2 ], especifican cómo resolver las compensaciones en los casos en que diferentes encabezados especifican requisitos conflictivos, como, en el ejemplo anterior, elegir entre una página HTML en inglés y una imagen GIF en alemán.

Impulsado por agentes

La negociación de contenido reactiva o dirigida por agentes se realiza mediante algoritmos en el agente de usuario, que eligen entre las posibles representaciones variantes. Esto se suele llevar a cabo a partir de una lista de representaciones proporcionada por el servidor y sus metadatos.

En resumen, cuando un agente de usuario envía una solicitud a un servidor, este le informa qué representaciones tiene disponibles, así como los metadatos de cada una (por ejemplo, tipo de contenido, calidad, idioma, etc.). El agente de usuario vuelve a enviar la solicitud a la URL específica de la representación elegida. Esta puede ser seleccionada automáticamente por el agente de usuario o bien este puede presentarle las opciones para que el usuario elija directamente. Más precisamente, el servidor responde con un código 300 (Opciones Múltiples) o un código 406 (No Aceptable). En el caso de la selección por parte del servidor, se proporcionan los criterios de aceptación del agente de usuario, pero el servidor no puede realizar la selección automáticamente. Lamentablemente, HTTP no especifica el formato de la lista de representaciones y metadatos, ni los mecanismos de selección.

Referencias

  1. Memento: Añadiendo tiempo a la web . Mementoweb.org. Consultado el 8 de septiembre de 2013.
  2. 1 2 "World Wide Web Consortium (W3C), "Negociación de contenido por perfil", Borrador de trabajo del W3C, 26 de noviembre de 2019" .
  • Este artículo se basa en parte en esta página archivada el 15 de noviembre de 2014 en la Wayback Machine , cuyos derechos de autor pertenecen a la Fundación Apache, pero que se publica bajo una licencia libre.
  • RFC 7231 — Protocolo de transferencia de hipertexto (HTTP/1.1): Semántica y contenido ( Sección 5.3: Negociación de contenido )
  • RFC 2295 — Negociación de contenido transparente en HTTP
  • RFC 2296 — Algoritmo de selección de variante remota HTTP -- RVSA/1.0
  • Negociación de contenido Apache
  • Librería de negociación de contenido PHP de código abierto (admite comodines y valores q).
  • Discusión sobre el servicio XHTML con negociación de contenido y preocupaciones del navegador que requieren esto