Обзор 301
, 302
и307
RFC 7231 , текущая ссылка для семантики и содержания / 1.1 протокола HTTP, определяет 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
(Permanent Redirect) код статуса, который похож на 301
(перемещено) , но не позволяет метод запроса будет изменен с POST
к GET
.
Код 308
состояния теперь определяется RFC 7538 (который устарел RFC 7238 ).
3. 308 постоянное перенаправление
Код состояния 308
(Постоянное перенаправление) указывает, что целевому ресурсу был назначен новый постоянный URI, и любые будущие ссылки на этот ресурс должны использовать один из вложенных URI. Клиенты с возможностями редактирования ссылок должны автоматически повторно связывать ссылки с действующим URI запроса на одну или несколько новых ссылок, отправленных сервером, где это возможно. [...]
Примечание. Этот код состояния аналогичен 301
(Перемещен навсегда), за исключением того, что он не позволяет изменять метод запроса с
POST
на GET
.
Итак, мы имеем следующее:
+-----------+-----------+
| 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 |
+------------------------------------------------------------+-----------+-----------+
Выбор наиболее подходящего кода статуса
Майкл Kropat собрать набор диаграмм решения , которое помогает определить наилучший код состояния для каждой конкретной ситуации. См. Следующие коды состояния 2xx
и 3xx
: