← Códigos HTTP

300 Multiple Choices

El recurso objetivo tiene más de una representación, cada una con su propio identificador más específico, y se está proporcionando información sobre las alternativas para que el usuario (o agente de usuario) pueda seleccionar una representación preferida redirigiendo su solicitud a uno o más de esos identificadores.

En otras palabras, el servidor desea que el agente de usuario participe en negociación reactiva para seleccionar la(s) representación(es) más apropiada(s) para sus necesidades1.

Si el servidor tiene una elección preferida, el servidor DEBERÍA generar un campo de encabezado Location que contenga una referencia URI de la elección preferida. El agente de usuario PUEDE usar el valor del campo Location para redirección automática.

Para métodos de solicitud distintos de HEAD, el servidor DEBERÍA generar un contenido en la respuesta 300 que contenga una lista de metadatos de representación y referencia(s) URI de las cuales el usuario o agente de usuario puede elegir la más preferida. El agente de usuario PUEDE hacer una selección de esa lista automáticamente si entiende el tipo de medio proporcionado. Un formato específico para selección automática no está definido por esta especificación porque HTTP intenta permanecer ortogonal a la definición de sus contenidos. En la práctica, la representación se proporciona en algún formato fácilmente analizable que se cree aceptable para el agente de usuario, según lo determinado por diseño compartido o negociación de contenido, o en algún formato hipertexto comúnmente aceptado.

Una respuesta 300 es cacheable por defecto; es decir, a menos que se indique lo contrario por la definición del método o controles de caché explícitos2.

Nota: La propuesta original para el código de estado 300 definía el campo de encabezado URI como proporcionando una lista de representaciones alternativas, de tal manera que sería utilizable para respuestas 200, 300 y 406 y sería transferido en respuestas al método HEAD. Sin embargo, la falta de implementación y desacuerdo sobre la sintaxis llevó a que tanto URI como Alternates (una propuesta posterior) fueran eliminados de esta especificación. Es posible comunicar la lista usando un conjunto de campos de encabezado Link3, cada uno con una relación de “alternate”, aunque la implementación es un problema de huevo y gallina.


Referencias por lenguaje

  • .NET HTTP Status Enum HttpStatusCode.MultipleChoices
  • Rust HTTP Status Constant http::StatusCode::MULTIPLE_CHOICES
  • Rails HTTP Status Symbol :multiple_choices
  • Go HTTP Status Constant http.StatusMultipleChoices
  • Symfony HTTP Status Constant Response::HTTP_MULTIPLE_CHOICES
  • Python2 HTTP Status Constant httplib.MULTIPLE_CHOICES
  • Python3+ HTTP Status Constant http.client.MULTIPLE_CHOICES
  • Python3.5+ HTTP Status Constant http.HTTPStatus.MULTIPLE_CHOICES