Огляд 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 |
+------------------------------------------------------------+-----------+-----------+
Вибір найбільш підходящого коду статусу
Майкл Кропат склав набір схем рішень, які допомагають визначити найкращий код статусу для кожної ситуації. Дивіться наступне для 2xx
та 3xx
коди статусу: