Назад | Перейти на главную страницу

Примеры 302 против 303

В чем разница между 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.

Исходные перенаправления

  • А 301 редирект - это постоянное перенаправление. Он кэшируется, и любые закладки для этого URL-адреса следует обновить, чтобы они указывали на новый URL-адрес.
  • А 302 перенаправление - это временное перенаправление. По умолчанию он не кэшируется, и его следует каждый раз повторно запрашивать (но вы можете переопределить это с помощью кеширования заголовков).

Для обоих из вышеперечисленных в последующем запросе должен использоваться тот же метод (POST, GET, CONNECT, PUT, DELETE и т. Д.), Что и в исходном запросе, а для всего, кроме запросов GET и HEAD, клиент должен запрашивать пользователя. перед тем, как сделать запрос.

К сожалению, это та часть, в которой клиенты иногда ошибаются, и большинство из них меняют метод последующего запроса на GET, независимо от исходного метода. Из-за этого были созданы еще три кода редиректа:

Новые перенаправления

  • А 303 перенаправление такое же, как 302 (то есть временное), за исключением того, что последующий запрос теперь явно изменен на запрос GET и никакого подтверждения не требуется.
  • А 307 перенаправление такое же, как 302 (то есть временное), за исключением того, что последующий запрос теперь явно совпадает с исходным запросом, и от пользователя должно быть получено подтверждение для методов запроса, отличных от GET и HEAD.
  • А 308 редирект такой же, как 301 (т. е. постоянный), за исключением метода запроса и тела не будет изменен.

У современных клиентов не должно возникнуть проблем с этими новыми перенаправлениями.

Используемые типы переадресации (301,302,303 ...) сильно влияют на то, как поисковые системы будут индексировать и ранжировать контент. Некоторые пауки могут даже отказаться индексировать временно перенаправленный контент. Подробности можно найти в различной литературе по SEO ...