В чем разница между HTTP 301 и 308 кодами состояния?

В чем разница между HTTP 301 а также 308 коды состояния?

  • 301 (Перемещено постоянно): этот и все последующие запросы должны быть направлены на указанный URI.

  • 308 (Постоянное перенаправление): запрос и все последующие запросы должны повторяться с использованием другого URI.

Кажется, они похожи.

2 ответа

Решение

Обзор 301, 302 а также 307

RFC 7231, текущий справочник по семантике и содержанию протокола HTTP/1.1, определяет 301(Перемещено навсегда) и302(Найдено) код состояния, позволяющий изменить метод запроса сPOST в GET, Эта спецификация также определяет307Код временного перенаправления, который не позволяет изменять метод запроса сPOST в GET,

Смотрите более подробную информацию ниже:

6.4.2. 301 перемещено навсегда

301 Код состояния (перемещен постоянно) указывает, что целевому ресурсу был назначен новый постоянный URI, и любые будущие ссылки на этот ресурс должны использовать один из вложенных URI. [...]

Примечание. По историческим причинам пользовательский агент МОЖЕТ изменить метод запроса сPOSTвGET для последующего запроса. Если это поведение нежелательно, 307 Вместо этого можно использовать код состояния (временное перенаправление).

6.4.3. 302 найдено

302(Найденный) код состояния указывает, что целевой ресурс временно находится под другим URI. Поскольку перенаправление может иногда изменяться, клиент должен продолжать использовать эффективный URI запроса для будущих запросов. [...]

Примечание. По историческим причинам пользовательский агент МОЖЕТ изменить метод запроса с POST вGETдля последующего запроса. Если это поведение нежелательно,307Вместо этого можно использовать код состояния (временное перенаправление).

6.4.7. 307 Временный редирект

307 Код состояния (временное перенаправление) указывает, что целевой ресурс временно находится под другим URI, и пользовательский агент НЕ ДОЛЖЕН изменять метод запроса, если он выполняет автоматическое перенаправление на этот URI. Поскольку перенаправление со временем может измениться, клиент должен продолжать использовать исходный эффективный URI запроса для будущих запросов. [...]

Примечание: этот код состояния похож на 302 (Найдено), за исключением того, что он не позволяет изменить метод запроса сPOSTвGET, Эта спецификация не определяет эквивалентный аналог для301(Перемещено навсегда) (однако RFC 7238 определяет код состояния308(Постоянный редирект) для этой цели).

Нужда в308

RFC 7238 был создан для определения 308 (Постоянное перенаправление) код состояния, который похож на 301(Перемещено навсегда), но не позволяет изменить метод запроса сPOSTвGET,

308 Код состояния теперь определяется RFC 7538 (который устарел RFC 7238).

3. 308 постоянный редирект

308 Код состояния (постоянное перенаправление) указывает, что целевому ресурсу был назначен новый постоянный URI, и любые будущие ссылки на этот ресурс должны использовать один из вложенных URI. Клиенты с возможностями редактирования ссылок должны автоматически повторно связывать ссылки с действующим URI запроса с одной или несколькими новыми ссылками, отправленными сервером, где это возможно. [...]

Примечание: этот код состояния похож на 301 (Перемещено постоянно), за исключением того, что не позволяет изменить метод запроса с POST в GET,

SE у нас есть следующее:

                                                             +-----------+-----------+
                                                             | Permanent | Temporary |
+------------------------------------------------------------+-----------+-----------+
| Allows changing the request method from POST to GET        | 301       | 302       |
+------------------------------------------------------------+-----------+-----------+
| Doesn't allow changing the request method from POST to GET | 308       | 307       |
+------------------------------------------------------------+-----------+-----------+

Выбор наиболее подходящего кода статуса

Посмотрите на диаграмму ниже (извлечено из этой страницы):

Выбор кода статуса 2xx или 3xx

Ниже упоминается обычное наблюдаемое поведение клиента при перенаправлении с использованием кодов состояния 3xx. Лучше всего протестировать эти сценарии с помощью вашего HTTP-клиента, поскольку он может не следовать по тому же пути, который указан ниже.

301

  • Метод HTTP будет изменен на GET. Не только POST, но и DELETE, PUT, PATCH и т. д. (кроме HEAD).
  • При перенаправлении большинство заголовков будут сохранены, но некоторые конфиденциальные заголовки, такие как авторизация, будут удалены.
  • Тот же домен, разные схемы перенаправления (например, перенаправление http на https) также сохранят конфиденциальные заголовки.
  • Тело может быть удалено, а может и не удалено. Поскольку метод изменен на GET, в большинстве случаев это не имеет значения.
  • Указывает на то, что поисковые системы могут обновлять свои ссылки на ресурс.

302

  • То же, что 301, но для временного перенаправления. Браузер перенаправляет на эту страницу, но поисковые системы не обновляют ссылки на ресурс.

308

  • Метод HTTP не изменится.
  • Большинство заголовков будут сохранены, но некоторые конфиденциальные заголовки, такие как авторизация, будут удалены. (исключение с перенаправлениями того же домена)
  • Тело сохранится.
  • Поисковые системы могут обновлять свои ссылки на ресурс.

307

  • То же, что 308, но для временного перенаправления. Браузер перенаправляет на эту страницу, но поисковые системы не обновляют ссылки на ресурс.

303

  • Это полезно, если вы хотите дать ответ на метод PUT или POST, который не является загруженными ресурсами, а подтверждает сообщение (например, «Вы успешно загрузили XYZ») с использованием перенаправления GET. Результат исходного HTTP-запроса можно найти по другому URL-адресу, который можно отдельно идентифицировать, добавить в закладки и кэшировать независимо от исходного запроса. Кроме того, обновление страницы результатов не приводит к повторному запуску операции POST/PUT. Некоторые приложения для этой цели используют HTTP-ответ 302 Found.
  • Все методы HTTP, кроме HEAD, будут изменены на GET.
  • При перенаправлении большинство заголовков будут сохранены, но некоторые конфиденциальные заголовки, такие как авторизация, будут удалены. (исключение с перенаправлениями того же домена)

300

  • Код ответа на статус перенаправления с множественным выбором указывает, что запрос имеет более одного возможного ответа, и клиент должен выбрать один из них.
Другие вопросы по тегам