Haces clic en un enlace y, en lugar de ser llevado a una nueva página, ves algo extraño: una página del servidor que enumera varias opciones diferentes sobre a dónde podrías ir a continuación. Podría ser una lista de diferentes formatos de archivo para un documento o diferentes versiones de idioma de un sitio web. Tú, el usuario, tienes la opción de elegir.
Este comportamiento inusual es el propósito previsto de uno de los códigos de estado más ambiguos y menos comprendidos de HTTP: 300 Multiple Choices (300 Múltiples Opciones).
Pero, ¿alguna vez te has encontrado con el 300 Multiple Choices?
A primera vista, suena vago, como si el servidor no pudiera decidirse. Y en cierto modo, ¡eso es algo cierto! El código de estado 300 Multiple Choices se utiliza cuando hay más de un recurso posible disponible para la solicitud de un cliente. En lugar de simplemente elegir uno, el servidor le dice al cliente:
"Oye, hay múltiples respuestas válidas. Necesitas elegir cuál quieres."
A diferencia de sus primos de redirección decisivos 301 Moved Permanently (301 Movido Permanentemente) y 302 Found (302 Encontrado), que le dicen al navegador exactamente a dónde ir, el código 300 es más una sugerencia. Es la forma en que el servidor dice: "Tengo varias representaciones diferentes de lo que pediste. No estoy seguro de cuál quieres, así que te dejaré a ti, o a tu navegador, elegir."
Es el equivalente digital de pedir indicaciones y que te entreguen un mapa con varias rutas potenciales resaltadas en lugar de que te señalen un único camino.
Si eres un desarrollador o un usuario web curioso, comprender este código es una inmersión fascinante en un camino menos transitado de cómo la web podría haber funcionado.
En esta publicación de blog completa, explicaremos qué significa el código de estado 300 Multiple Choices, por qué y cuándo se usa, cómo afecta la comunicación cliente-servidor y cómo tú, como desarrollador, puedes manejarlo de manera efectiva. Si quieres simular y probar códigos de estado inusuales como el 300 Multiple Choices, no necesitas configurar un servidor personalizado desde cero. Puedes usar Apidog, una plataforma todo en uno para diseño de API, simulación, pruebas, depuración y documentación. Con Apidog, puedes simular una respuesta 300 Multiple Choices y ver cómo reacciona tu aplicación, dándote un mejor control sobre el comportamiento de tu API. ¿Y la mejor parte? Puedes descargarlo gratis.
Ahora, exploremos todo lo que necesitas saber sobre el código de estado HTTP 300 Multiple Choices.
¿Qué es el código de estado HTTP 300 Multiple Choices?
El código de estado 300 Multiple Choices es parte de la clase de códigos de respuesta HTTP de redirección 3xx. Cuando un servidor devuelve una respuesta 300, indica que la solicitud tiene más de una respuesta posible. En otras palabras, el recurso solicitado corresponde a múltiples opciones disponibles. El servidor envía una lista de estas opciones al cliente, permitiéndole elegir qué recurso desea acceder.
En lugar de devolver una sola versión, el servidor proporciona una lista de opciones para que el cliente pueda decidir cuál obtener.
Por ejemplo:
- Un recurso podría estar disponible en diferentes formatos (por ejemplo,
JSON,XMLoHTML). - O podría existir en diferentes idiomas (como inglés, español o chino).
- O tal vez el contenido esté disponible en diferentes resoluciones (piensa en imágenes o videos).
En resumen, el 300 dice:
"Encontré lo que quieres, pero tienes múltiples opciones válidas. ¿Cuál te gustaría?"
Piénsalo como pedir en un restaurante: cuando el camarero explica varios platos igualmente válidos, tú eliges cuál te gustaría. De manera similar, la respuesta 300 presenta opciones al cliente.
Los orígenes del código de estado 300
La respuesta 300 Multiple Choices se introdujo en la especificación HTTP/1.1 (RFC 7231). El razonamiento era simple:
- A medida que la web crecía, los recursos a menudo necesitaban múltiples variantes (idioma, formato, específicas del dispositivo).
- En lugar de que los servidores adivinaran cuál quería un cliente, podían decir explícitamente: Aquí está el menú. Elige algo.
Fue diseñado para proporcionar flexibilidad y control al cliente.
¿Por qué existe el 300 Multiple Choices?
Quizás te preguntes, ¿por qué no simplemente redirigir a un recurso específico y usar una redirección 301 o 302? La razón por la que existe el 300 Multiple Choices es para proporcionar transparencia y elección.
Algunos escenarios requieren dar a los clientes más de una opción para un recurso, en lugar de asumir lo que quieren. Es una forma en que los servidores dicen: "Oye, aquí hay varias coincidencias viables para esa solicitud. Tú decides cuál encaja mejor."
Este enfoque puede mejorar la experiencia del usuario, admitir contenido multilingüe o multiformato y hacer que las API sean más flexibles.
Cómo se suponía que funcionaría: un ejemplo teórico
Cuando un servidor devuelve un código de estado 300, generalmente incluye un cuerpo de respuesta o encabezados que indican las diferentes opciones disponibles. El cliente luego usa esta información para decidir qué recurso solicitar a continuación.
Imaginemos un escenario para el sitio web de una universidad.
1. La Solicitud: Un usuario de alguna parte del mundo solicita la página de inicio.
GET / HTTP/1.1Host: www.university.example
2. El Dilema del Servidor: El servidor tiene la página de inicio disponible en inglés, español y francés. No sabe qué idioma prefiere el usuario. En lugar de adivinar (por ejemplo, usando el encabezado Accept-Language), decide dejar que el usuario elija.
3. La Respuesta 300:
HTTP/1.1 300 Multiple ChoicesContent-Type: text/html; charset=utf-8
<html>
<head><title>Choose a Language</title></head>
<body>
<h1>Please select your preferred language:</h1>
<ul>
<li><a href="/en">English</a></li>
<li><a href="/es">Español</a></li>
<li><a href="/fr">Français</a></li>
</ul>
</body>
</html>
El servidor también podría incluir sugerencias más avanzadas legibles por máquina en los encabezados, como un encabezado Link, aunque esto rara vez se implementa.
4. La Acción del Usuario: El usuario ve esta página en su navegador y hace clic en "English".
5. La Redirección: El navegador luego realiza una nueva solicitud a /en, y el servidor responde con la página de inicio en inglés y un estado 200 OK.
Esto puede ocurrir automáticamente en navegadores o programáticamente en APIs.
El defecto fatal: por qué el 300 Multiple Choices rara vez se usa
Esto parece lógico, entonces, ¿por qué este código casi nunca se encuentra en la web moderna? Los problemas son numerosos y fundamentales.
1. Rompe la automatización: La web funciona con navegadores de automatización, scripts, APIs, rastreadores de motores de búsqueda. Estos agentes esperan instrucciones claras. Una respuesta 300 obliga a un humano a tomar una decisión, deteniendo cualquier proceso automatizado. Un rastreador no sabría qué enlace seguir.
2. Mala experiencia de usuario (UX): Es una experiencia torpe e interruptiva para el usuario. La mejor práctica moderna es:
- Redirigir automáticamente según la configuración de idioma del usuario (encabezado
Accept-Language). - Servir una sola página con selectores de idioma incorporados.
- Usar subdominios (
en.university.example) o diferentes dominios (university.example.fr), que se tratan como recursos distintos desde el principio.
3. No es eficiente: Requiere un viaje de ida y vuelta adicional (solicitud -> 300 -> elección del usuario -> nueva solicitud) en lugar de una redirección simple y automática.
4. Ambigüedad: La especificación HTTP no define estrictamente cómo deben presentarse las opciones. ¿Debería ser una página HTML? ¿Un formato XML específico? Esta falta de un estándar lo hace poco confiable para que las máquinas lo analicen.
Escenarios comunes para el 300 Multiple Choices
Exploremos algunos casos de uso donde el 300 Multiple Choices puede ser útil:
- Negociación de formato de archivo: Un servidor puede ofrecer un documento en PDF, HTML o texto sin formato, permitiendo que el cliente elija.
- Selección de idioma: Cuando el contenido está disponible en varios idiomas, el 300 informa a los clientes que elijan su versión preferida.
- Múltiples representaciones: Para imágenes o medios con diferentes resoluciones o codificaciones.
- APIs con múltiples versiones de recursos: Un recurso puede existir con diferentes representaciones o versiones.
¿Cómo se ve una respuesta 300?
El formato exacto de una respuesta 300 puede variar, dependiendo del servidor y el caso de uso, pero típicamente contiene una lista o enlaces.
Aquí hay un ejemplo simple de una respuesta con enlaces en el cuerpo del mensaje:
textHTTP/1.1 300 Multiple Choices Content-Type: text/html
<html>
<body>
<h1>Multiple Choices</h1> <ul>
<li><a href="/resource1.html">Resource 1</a></li>
<li><a href="/resource2.html">Resource 2</a></li>
<li><a href="/resource3.html">Resource 3</a></li> </ul>
</body>
</html>Esto permite que el cliente o el usuario haga clic o seleccione el recurso que desea.
Manejo del 300 Multiple Choices en el lado del cliente
Cuando tu cliente encuentra una respuesta 300, esto es lo que debe hacer:
- Analizar la lista de opciones devueltas por el servidor.
- Presentar opciones claras al usuario (si corresponde).
- Permitir que la lógica automatizada seleccione el enlace más apropiado según criterios como el idioma, el formato o la versión.
- Realizar una nueva solicitud al recurso elegido.
Muchos navegadores pueden solicitar a los usuarios que seleccionen manualmente, pero las API generalmente necesitan automatizar esta lógica.
300 Multiple Choices vs. otros códigos de estado 3xx
Para comprender mejor el 300, comparémoslo con otros códigos 3xx comunes:
| Código de Estado | Descripción | Cuándo Usar |
|---|---|---|
| 300 Múltiples Opciones | Múltiples opciones para el recurso solicitado | Cuando los clientes deben elegir entre múltiples representaciones |
| 301 Movido Permanentemente | El recurso se ha movido permanentemente | Usar si un recurso se movió a una única nueva ubicación |
| 302 Encontrado | Redirección temporal | Dirigir temporalmente al cliente a un recurso diferente |
| 303 Ver Otro | Redirigir usando GET a otro recurso | Después de POST, redirigir al cliente a una URL de recuperación |
| 304 No Modificado | Recurso en caché, sin cambios | Usar para optimizaciones de caché |
A diferencia del 301 o 302 que dirigen a los clientes automáticamente, el 300 requiere la entrada del cliente.
300 vs. Otros códigos de redirección
| Código | Significado | Caso de Uso Típico |
|---|---|---|
| 300 | Múltiples Opciones | Múltiples idiomas, formatos o calidades |
| 301 | Movido Permanentemente | Nueva URL permanente |
| 302 | Encontrado | Redirección temporal |
| 303 | Ver Otro | Redirigir después de POST a otro recurso |
| 304 | No Modificado | Versión en caché sigue siendo válida |
Desafíos al usar el 300 Multiple Choices
Si bien el 300 Multiple Choices puede ser útil, presenta algunos desafíos:
- Lógica compleja del cliente: Los clientes o agentes de usuario necesitan analizar las opciones e implementar la lógica de decisión.
- Consideraciones de UX: Presentar múltiples opciones a los usuarios puede confundirlos si no se maneja bien.
- Soporte limitado: Muchos servicios web modernos prefieren las redirecciones automáticas o los encabezados de negociación de contenido en lugar del 300.
- Poco utilizado: El 300 es uno de los códigos de estado HTTP menos observados.
Por qué los desarrolladores aún deberían conocer el 300 Multiple Choices
Aunque el 300 Multiple Choices no es común, comprenderlo es importante por varias razones:
- Mejor conocimiento de HTTP: Conocer todo el espectro de códigos HTTP te convierte en un desarrollador más fuerte.
- Negociación de contenido mejorada: En APIs o sitios web que sirven múltiples versiones de datos, el 300 ofrece un mecanismo flexible.
- Depuración de casos extremos: A veces, te encontrarás con una respuesta 300 de sistemas heredados o servidores especializados.
- Control del lado del servidor: Es una herramienta para que los arquitectos de servidores ofrezcan opciones sin adivinar.
Implementación del 300 Multiple Choices: mejores prácticas
Si decides usar el 300 Multiple Choices para tu servidor o API, aquí tienes algunos consejos:
- Formatea y estructura claramente la lista de opciones en la respuesta.
- Asegúrate de que las URL de las opciones sean válidas y accesibles.
- Para clientes de API, proporciona documentación clara sobre cómo manejar las respuestas 300.
- Considera redirecciones automáticas de respaldo (por ejemplo, 301 o 302) para clientes que no pueden manejar el 300.
- Usa encabezados de negociación de contenido como alternativa cuando sea práctico.
Ejemplos reales del 300 Multiple Choices
Ejemplo 1: Variantes de idioma
Un sitio web multilingüe ofrece páginas en inglés, español y francés para la misma ruta de recurso, devolviendo 300 para que el usuario pueda seleccionar.
GET /docs HTTP/1.1Respuesta:
HTTP/1.1 300 Multiple Choices
Content-Type: application/json
{
"available_variants": [
{ "language": "en", "url": "/docs/en" },
{ "language": "es", "url": "/docs/es" },
{ "language": "zh", "url": "/docs/zh" }
]
}
Ejemplo 2: Formato de contenido
Un servicio de intercambio de archivos puede presentar enlaces de descarga para tipos de archivo originales, comprimidos o alternativos.
GET /data HTTP/1.1
Respuesta:
HTTP/1.1 300 Multiple Choices
Content-Type: application/json
{
"available_formats": [
{ "type": "application/json", "url": "/data.json" },
{ "type": "application/xml", "url": "/data.xml" },
{ "type": "text/html", "url": "/data.html" }
]
}
Ejemplo 3: Calidad de medios
Un endpoint de API que sirve imágenes podría devolver 300 con opciones para diferentes resoluciones o formatos.
GET /video HTTP/1.1Respuesta:
HTTP/1.1 300 Multiple Choices
Content-Type: application/json
{
"resolutions": [
{ "quality": "480p", "url": "/video-480.mp4" },
{ "quality": "720p", "url": "/video-720.mp4" },
{ "quality": "1080p", "url": "/video-1080.mp4" }
]
}Beneficios de usar el 300 Multiple Choices
Usar 300 Multiple Choices puede sonar raro, pero tiene algunos beneficios reales:
- Claridad: Los clientes pueden elegir exactamente lo que quieren.
- Flexibilidad: Admite contenido multilingüe, multiformato o de varias calidades.
- Cumplimiento de estándares: Se alinea con las especificaciones HTTP/1.1.
- UX mejorada: En lugar de la selección automática, puedes dejar que los usuarios decidan.
Errores comunes y malentendidos
- No ampliamente compatible → La mayoría de los navegadores no muestran automáticamente las opciones 300.
- Confusión con redirecciones → Los desarrolladores a menudo lo confunden con
301o302. - Uso excesivo → Devolver 300 para recursos simples puede complicar innecesariamente las API.
- Problemas de caché → Los clientes pueden almacenar en caché solo una opción en lugar de varias.
Probando respuestas 300 con Apidog

Aunque es probable que nunca construyas una API que devuelva 300, comprender cómo probar todos los códigos de estado posibles es una señal de un desarrollador minucioso. Apidog es la herramienta perfecta para explorar estos matices de HTTP.
Con Apidog, puedes:
- Simular una respuesta 300: Crea un endpoint simulado en Apidog que devuelva un estado
300con un cuerpo HTML personalizado que enumere las opciones. Esto es excelente para probar cómo tu aplicación manejaría este escenario inusual. - Probar la resiliencia del cliente: Usa tu endpoint simulado para asegurarte de que tu aplicación cliente (por ejemplo, una aplicación móvil o un script) no falle cuando reciba un
300inesperado y tenga una estrategia de respaldo. - Comparar con prácticas modernas: Usa Apidog para probar la negociación de contenido adecuada. Crea solicitudes con diferentes encabezados
AcceptyAccept-Languagey verifica que tu servidor responda correctamente con redirecciones302al recurso apropiado. - Documentar el comportamiento: Si alguna vez necesitaras usar un
300, podrías usar Apidog para documentar el formato de respuesta esperado y las opciones para otros desarrolladores.
De esta manera, no necesitas configurar manualmente un backend solo para simular casos extremos. Descarga Apidog gratis y toma el control de tu proceso de prueba de API, incluso para los códigos de estado HTTP más complicados como el 300.
Mejores prácticas para desarrolladores
- Usar solo cuando sea necesario: No compliques demasiado con el 300 si una redirección es suficiente.
- Proporcionar metadatos claros: Ayuda a los clientes a elegir proporcionando información descriptiva.
- Los fallbacks importan: Si un cliente no entiende el
300, asegúrate de que al menos una opción sea accesible. - Documentar el comportamiento: En la documentación de tu API (¡que puedes gestionar con Apidog!), explica cómo los clientes deben manejar el
300.
Consideraciones avanzadas para diseñadores de API
- Negociar inteligentemente: Algunos servidores implementan la negociación de contenido (eligiendo la mejor opción automáticamente) en lugar de devolver 300.
- Proporcionar hipervínculos: Facilita que los clientes sigan la opción correcta.
- Combinar con encabezados: Usa los encabezados
Accept-Language,AcceptyUser-Agentpara refinar las opciones. - Pruebas y documentación: Herramientas como Apidog ayudan a documentar claramente estos casos extremos para tu equipo.
Las alternativas modernas y mejores
Hoy en día, los escenarios en los que se podría haber utilizado un 300 se manejan de formas mucho mejores:
1. Para la negociación de contenido (idioma, formato):
Esta es la característica clave que hizo obsoleto el 300. El cliente puede establecer sus preferencias de antemano usando encabezados, y el servidor puede redirigir automáticamente a la mejor opción.
Accept-Language: en, fr;q=0.9-> El navegador dice "Prefiero inglés, pero puedo aceptar francés."Accept: application/json, text/html;q=0.8-> El cliente de API dice "Quiero JSON si es posible, de lo contrario HTML."
El servidor puede entonces enviar automáticamente una redirección 302 Found o 303 See Other al recurso más apropiado (/en/index.html o /data.json), evitando por completo la necesidad de una elección manual.
2. Para múltiples representaciones:
Si un recurso tiene múltiples formatos (por ejemplo, PDF, DOCX, TXT), el enfoque moderno es ofrecer enlaces a todos ellos en una única página de destino con estado 200 OK, no usar una respuesta 300.
Conclusión: Adoptando el HTTP 300 Multiple Choices en tu desarrollo
El HTTP 300 Multiple Choices es una parte fascinante del ecosistema HTTP a menudo oculta del uso diario. Su propósito de ofrecer múltiples opciones válidas para un recurso brinda flexibilidad tanto a los servidores como a los clientes, especialmente al tratar con contenido multiformato y multiversión.
Para los desarrolladores de hoy, la lección del 300 es apreciar la elegancia de las soluciones de la web moderna. El uso de encabezados para la negociación de contenido y las redirecciones decisivas 3xx proporciona una experiencia más rápida, confiable y automatizada tanto para usuarios como para máquinas.
Al final, la web evolucionó en una dirección diferente: la de la automatización, la negociación explícita de contenido y una experiencia de usuario fluida. El código 300 permanece en la especificación, un fantasma de un futuro potencial que nunca se materializó.
El código de estado 300 Multiple Choices es uno de esos códigos HTTP que no aparecen todos los días, pero cuando lo hacen, son poderosos.
Les dice a los clientes:
"Aquí hay múltiples recursos válidos. Tú decides cuál es el mejor."
Esto es especialmente útil en aplicaciones multilingües, APIs que ofrecen múltiples formatos o medios con diferentes niveles de calidad.
Si bien su adopción es limitada, representa la flexibilidad incorporada en HTTP; comprender el 300 mejora tu comprensión de la comunicación web y te prepara para casos extremos o requisitos de API especializados.
Y recuerda, para probar y documentar eficazmente las API que pueden devolver 300 Multiple Choices o cualquier otro código de estado, descargar Apidog gratis es un excelente primer paso. Apidog simplifica la interacción con respuestas de código HTTP complejas y aumenta tu productividad.
