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

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

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

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

они кажутся похожими.

1 ответов


обзор 301, 302 и 307

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

Подробнее см. ниже:

6.4.2. 301 Окончательно Перемещено

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

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

6.4.3. 302 нашел

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

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

6.4.7. 307 Временное Перенаправление

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

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

необходимость 308

на RFC 7238 был создан для определения 308 (постоянное перенаправление) код состояния, который похож на 301 (перемещено постоянно), но не позволяет изменить метод запроса с POST to 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       |
+------------------------------------------------------------+-----------+-----------+

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

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

Picking a 2xx or 3xx status code