В чем разница между 302
и 303
ответ?
http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
Являются ли они взаимозаменяемыми или почему один должен использоваться вместо другого? Не могли бы вы представить пример использования, когда один будет использоваться (а другой - нет)?
Описание на странице, на которую вы ссылаетесь, похоже, достаточно полно описывает их предполагаемое назначение:
Редирект 302 указывает, что перенаправление временный - клиенты должны возвращаться к исходному URL в будущих запросах.
Редирект 303 предназначен для перенаправления POST
запрос к GET
ресурс (в противном случае клиент предполагает, что метод запроса для нового местоположения такой же, как и для исходного ресурса).
Если вы перенаправляете клиента как часть своего веб-приложения, но ожидаете, что он всегда будет запускаться с веб-приложения (например, с сокращенного URL-адреса), перенаправление 302 имеет смысл. Редирект 303 используется, когда вы получаете POST
данные от клиента (например, отправка формы), и вы хотите перенаправить их на новую веб-страницу для получения с помощью GET
вместо того POST
(например, стандартный запрос страницы).
Но посмотрите это примечание из определений кодов состояния - большинство клиентов будут делать то же самое для 302 или 303:
Note: RFC 1945 and RFC 2068 specify that the client is not allowed
to change the method on the redirected request. However, most
existing user agent implementations treat 302 as if it were a 303
response, performing a GET on the Location field-value regardless
of the original request method. The status codes 303 and 307 have
been added for servers that wish to make unambiguously clear which
kind of reaction is expected of the client.
Существует пять различных типов перенаправления. Первоначально их было только два (301 и 302), но большинство клиентов реализовали их неправильно, поэтому были добавлены еще три, чтобы прояснить разницу между двумя различными возможными вариантами поведения.
В RFC, на который вы ссылаетесь, говорится об этом в разделе о 302 редиректах:
Note: RFC 1945 and RFC 2068 specify that the client is not allowed to change the method on the redirected request. However, most existing user agent implementations treat 302 as if it were a 303 response, performing a GET on the Location field-value regardless of the original request method. The status codes 303 and 307 have been added for servers that wish to make unambiguously clear which kind of reaction is expected of the client.
Для обоих из вышеперечисленных в последующем запросе должен использоваться тот же метод (POST, GET, CONNECT, PUT, DELETE и т. Д.), Что и в исходном запросе, а для всего, кроме запросов GET и HEAD, клиент должен запрашивать пользователя. перед тем, как сделать запрос.
К сожалению, это та часть, в которой клиенты иногда ошибаются, и большинство из них меняют метод последующего запроса на GET, независимо от исходного метода. Из-за этого были созданы еще три кода редиректа:
У современных клиентов не должно возникнуть проблем с этими новыми перенаправлениями.
Используемые типы переадресации (301,302,303 ...) сильно влияют на то, как поисковые системы будут индексировать и ранжировать контент. Некоторые пауки могут даже отказаться индексировать временно перенаправленный контент. Подробности можно найти в различной литературе по SEO ...