300 Multiple Choices
Uso
Cuando se recibe el código de estado 300 Multiple Choices, el contenido del cuerpo del mensaje varía según el método de la solicitud. Una solicitud HEAD no incluye cuerpo de mensaje. Para los demás métodos, el cuerpo contiene una lista de la que el cliente selecciona la respuesta más adecuada.
En las respuestas a métodos distintos de HEAD, el cuerpo contiene la lista de opciones disponibles. La cabecera Link con rel=“alternate” también se usa para identificar cada opción. Si existe una respuesta predeterminada o el servidor tiene una opción preferida, la cabecera Location identifica esa preferencia.
Ejemplo
El cliente solicita un recurso y el servidor ofrece varias opciones. Las cabeceras incluyen las rutas a cada recurso. Dado que esto sigue a una solicitud GET, el cuerpo proporciona una lista de opciones en la que se puede hacer clic.
Solicitud
GET /tech-news HTTP/1.1
Host: example.com
Respuesta
HTTP/1.1 300 Multiple Choices
Link: </leading/news.html>; rel="alternate"
Link: </bleeding/news.html>; rel="alternate"
Location: </leading/news.html>
Content-Type: text/html
Content-Length: 164
<h2>Choose from one of the following</h2>
<ul>
<li><a href=/leading/news.html>Leading edge</a>
<li><a href=/bleeding/news.html>Bleeding edge</a>
</ul>
Comportamiento del navegador
La mayoría de los navegadores no presentan una interfaz de selección al recibir una respuesta 300. Cuando hay una cabecera Location, los navegadores suelen seguir automáticamente la opción preferida, igual que con una redirección 302. Sin cabecera Location, el navegador representa el cuerpo de la respuesta, que contiene la lista de opciones disponibles. En la práctica, rara vez se encuentra un 300, ya que la negociación de contenido (Content-Negotiation) gestiona la selección de formato de forma transparente.
Referencias de código
.NET
HttpStatusCode.MultipleChoices
Rust
http::StatusCode::MULTIPLE_CHOICES
Rails
:multiple_choices
Go
http.StatusMultipleChoices
Symfony
Response::HTTP_MULTIPLE_CHOICES
Python3.5+
http.HTTPStatus.MULTIPLE_CHOICES
Java
java.net.HttpURLConnection.HTTP_MULT_CHOICE
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_MULTIPLE_CHOICES
Angular
@angular/common/http/HttpStatusCode.MultipleChoices