¿Qué narices es esto?
El código 300 Multiple Choices es el "aquí tienes varias opciones, elige tú" de HTTP. Es cuando el servidor tiene múltiples variantes del mismo recurso y no puede decidir automáticamente cuál enviarte. Como cuando llegas a un restaurante y el camarero te dice "tenemos tres versiones del mismo plato, ¿cuál prefieres?".
Este código se usa principalmente en content negotiation (negociación de contenido), donde un mismo recurso puede estar disponible en diferentes idiomas, formatos, calidades o versiones. El servidor construye una lista de opciones disponibles y delega la decisión al cliente. A diferencia de otros 3xx, el 300 no redirecciona automáticamente - te para y dice "necesito que elijas".
El 300 aparece típicamente en:
- Sitios con múltiples idiomas sin detección automática
- APIs que devuelven datos en diferentes formatos (JSON, XML, CSV)
- Recursos con versiones múltiples (calidades de imagen, resoluciones)
- Transparent Content Negotiation de Apache (muy raro)
- Sistemas de documentación con formatos alternativos
🎯 Dato curioso
El 300 es como el político de los códigos HTTP: evita tomar decisiones difíciles y las pasa al usuario. La mayoría de navegadores lo manejan mal o lo ignoran, por eso es tan raro verlo en la vida real.
La respuesta 300 debe incluir una lista de alternativas en el body (típicamente HTML con enlaces) y puede incluir un header Location con la opción preferida del servidor. El problema es que no hay forma estándar de elegir automáticamente, por eso la mayoría de servidores prefieren hacer la negociación internamente y devolver 200 directamente.