HTTPQUERY
Русский

300 Multiple Choices

Применение

При получении кода состояния 300 Multiple Choices содержимое тела сообщения различается в зависимости от метода запроса. Запрос HEAD не содержит тела сообщения. Для остальных методов тело содержит список, из которого клиент выбирает наиболее подходящий ответ.

Для ответов не на HEAD тело содержит список доступных вариантов. Для обозначения каждого варианта также используется заголовок Link с rel=“alternate”. Если существует вариант по умолчанию или у сервера есть предпочтительный выбор, этот выбор обозначается заголовком Location.

Пример

Клиент запрашивает ресурс, и сервер предлагает несколько вариантов. Заголовки содержат пути к каждому ресурсу. Поскольку это ответ на запрос GET, тело содержит кликабельный список вариантов.

Запрос

GET /tech-news HTTP/1.1
Host: example.com

Ответ

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>

Поведение браузера

Большинство браузеров при получении ответа 300 не показывают интерфейс выбора. При наличии заголовка Location браузеры обычно автоматически следуют предпочтительному варианту, как при перенаправлении 302. Без заголовка Location браузер отображает тело ответа, содержащее список доступных вариантов. На практике 300 встречается редко, поскольку согласование содержимого (Content-Negotiation) выбирает формат прозрачно.

Примеры кода

.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