La negociación de contenido (Content Negotiation) es el mecanismo de la comunicación HTTP por el cual el cliente (navegador) y el servidor acuerdan la representación más adecuada del recurso solicitado. Permite que una misma URL devuelva contenido diferente en función del idioma del usuario, su dispositivo o los formatos que soporta.
La negociación se realiza principalmente a través de las cabeceras de la solicitud HTTP. Las más representativas son Accept (tipos de medio soportados: text/html, application/json, etc.), Accept-Language (idiomas preferidos: ja, en-US, etc.) y Accept-Encoding (métodos de compresión soportados: gzip, br, etc.).
En sitios multilingues, la negociación de contenido guarda una relación estrecha con las URL acortadas. Es posible implementar que una misma URL acortada redirija a la versión en japonés o en inglés según la configuración de idioma del navegador del usuario. Sin embargo, desde el punto de vista del SEO, es preferible que cada idioma tenga su propia URL y que se vinculen mediante etiquetas hreflang. La negociación de contenido basada en idioma puede impedir que los motores de búsqueda indexen correctamente cada versión lingüística.
En el diseño de API, la negociación de contenido también es fundamental. Es habitual que la API de un servicio de URL acortadas devuelva la respuesta en JSON o XML según la cabecera Accept. Los principios de diseño RESTful recomiendan ofrecer múltiples representaciones de un mismo recurso.
Existen dos tipos principales de negociación: la dirigida por el servidor (el servidor decide en función de las cabeceras de la solicitud) y la dirigida por el agente (el servidor presenta las opciones y el cliente elige). En la web, la primera es con diferencia la más utilizada. Puedes encontrar libros relacionados en Amazon.