Разница между HTTP-кодами перенаправления
Различия между различными кодами перенаправления HTTP 3XX мне не ясны. Да, я прочитал спецификацию, но здесь есть некоторое расхождение между стандартной и реальной практикой.
301
Код перенаправления кажется достаточно ясным: это означает, что ресурс был постоянно перемещен в другой URI, и будущие запросы должны использовать этот URI.
И 307
Код перенаправления также кажется ясным: это означает, что перенаправление является временным, и будущие запросы все равно должны использовать исходный URI.
Но я не могу сказать, какая разница между 302
а также 303
или почему любой из них действительно отличается от 301
, Кажется, что 302
изначально был предназначен для временного перенаправления, (как 307
), но на практике большинство браузеров рассматривали это как 303
, Но какая разница между 303
и 301
? Является 301
должен означать, что перенаправление является более постоянным?
2 ответа
- 301: постоянное перенаправление. Клиенты, делающие последующие запросы на этот ресурс, должны использовать новый URI. Клиенты не должны автоматически выполнять перенаправление для запросов POST/PUT/DELETE.
- 302: Перенаправление по неопределенной причине. Клиенты, делающие последующие запросы на этот ресурс, не должны использовать новый URI. Клиенты не должны автоматически выполнять перенаправление для запросов POST/PUT/DELETE.
- 303: Перенаправление по неопределенной причине. Как правило, "Операция завершена, продолжить в другом месте". Клиенты, делающие последующие запросы на этот ресурс, не должны использовать новый URI. Клиенты должны следовать перенаправлению для запросов POST/PUT/DELETE, но использовать GET для последующего запроса.
- 307: временное перенаправление. Ресурс может вернуться в это место позже. Клиенты, делающие последующие запросы на этот ресурс, должны использовать старый URI. Клиенты не должны автоматически выполнять перенаправление для запросов POST/PUT/DELETE.
Я лично рекомендую избегать 302, если у вас есть выбор. Многие клиенты не следуют спецификации, когда они сталкиваются с 302. Для временных перенаправлений вы должны использовать 303 или 307, в зависимости от того, какой тип поведения вы хотите для не-GET запросов. Предпочитайте 307 - 303, если вам не нужно альтернативное поведение при POST/PUT/DELETE.
Разница между 303 и 307 заключается в следующем:
303: см. Другие. Запрос получен правильно, но результаты должны быть получены с помощью GET на URL перенаправления.
307: временное перенаправление. Весь запрос должен быть перенаправлен на новый URL. Любые данные должны быть опубликованы повторно.
Обратите внимание, что 302 должен был иметь поведение 307, но большинство браузеров реализовали его как поведение 303 (оба из которых тогда не существовали). Поэтому эти два новых кода были введены для замены 302.
Разница между 301 и 303:
301: документ перемещен. Будущие запросы должны использовать новый URL. Этот URL устарел.
Примечание: будьте осторожны с этим кодом. Браузеры и прокси-серверы обычно применяют к нему действительно агрессивное кеширование, поэтому, если вы ответите с 301, это может занять много времени, чтобы кто-то повторно посетил этот URL.
303: запрос получен правильно. Любые запросы PUT обрабатываются. Полученный документ можно получить из URL перенаправления. Будущий запрос все еще должен идти в исходный URL.