Обзор 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:
