stringtranslate.com

Negociación de contenidos

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

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

Mecanismos

HTTP proporciona varios mecanismos de negociación de contenido diferentes, incluidos: impulsado por servidor (o proactivo), impulsado por agente (o reactivo), transparente y/o combinaciones híbridas de los mismos.

Impulsado por servidor

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

Para resumir cómo funciona esto, cuando un agente de usuario envía una solicitud a un servidor, el agente de usuario le informa al servidor qué tipos de medios u otros aspectos de la presentación de contenido comprende y califica su nivel de comprensión. Más precisamente, el agente de usuario proporciona encabezados HTTP que enumeran los aspectos aceptables del recurso y los factores de calidad para ellos. El servidor puede entonces proporcionar la versión del recurso que mejor se adapta 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

El navegador puede indicar, en cambio, que se prefiere el alemán, si es posible, pero que el inglés también es aceptable configurando:

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

Donde el factor de calidad 'q' para el alemán es mayor que para el inglés.

A menudo se proporcionan varios encabezados HTTP juntos para el formato de contenido o, específicamente, el tipo de medio, el idioma y algunos 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-Charset& Accept-Encodingspara codificaciones de caracteres y 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 se acepta el inglés, 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/**/*

Aceptar idioma:  de; q  =1.0,  en;  q=0.5 Aceptar:  texto/html;  q=1.0,  texto/*;  q=0.8,  imagen/gif;  q=0.6,  imagen/jpeg;  q=0.6,  imagen/*;  q=0.5,  */*;  q=0.1

Además de los aspectos de la negociación de contenido impulsada por servidor por tipo de contenido y por lenguaje especificados en RFC 7231, existen 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 particulares 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 los perfiles de datos.

Ni el RFC 7231 ni las especificaciones relacionadas más recientes, como Content Negotiation by Profile [2], especifican cómo resolver las compensaciones en casos en los 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 impulsada por el agente se realiza mediante algoritmos en el agente de usuario que eligen entre las posibles representaciones variantes. Esto se realiza generalmente en función de una lista de representaciones proporcionada por el servidor y metadatos sobre ellas.

Para resumir cómo funciona esto, cuando un agente de usuario envía una solicitud a un servidor, el servidor informa al agente de usuario qué representaciones tiene disponibles, así como los metadatos que tiene sobre cada representación (por ejemplo, tipo de contenido, calidad, idioma, etc.). A continuación, el agente de usuario vuelve a enviar la solicitud a una URL específica para la representación elegida. Esta puede ser elegida automáticamente por el agente de usuario o el agente de usuario puede presentar al usuario las opciones y el usuario puede elegirlas directamente. Más precisamente, el servidor responde con 300 Opciones múltiples o 406 No aceptable (cuando se proporcionan criterios de aceptación del agente de usuario controlados por el servidor, pero el servidor no puede hacer una selección automáticamente). Desafortunadamente, HTTP deja sin especificar el formato de la lista de representaciones y metadatos junto con los mecanismos de selección.

Referencias

  1. ^ Memento: Adding Time to the Web (Memento: Añadiendo tiempo a la Web). Mementoweb.org. Recuperado el 8 de septiembre de 2013.
  2. ^ ab "Consorcio World Wide Web (W3C), "Negociación de contenido por perfil", Borrador de trabajo del W3C, 26 de noviembre de 2019".

Enlaces externos

Este artículo se basa en parte en esta página Archivada el 15 de noviembre de 2014 en Wayback Machine , que tiene derechos de autor de la Fundación Apache pero se publica bajo una licencia libre.