Что именно означает HTTP / 1.1 302? - PullRequest
102 голосов
/ 10 июня 2009

В какой-то статье, которую я читал однажды, говорилось, что это означает прыжок (с одного URI на другой), но я обнаружил этот «302», даже когда на самом деле прыжков вообще не было!

Ответы [ 10 ]

68 голосов
/ 10 июня 2009

Перенаправление 302 означает, что страница была временно перемещена, а 301 означает, что она была перемещена навсегда.

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

41 голосов
/ 15 августа 2017

Этот вопрос задавался давно, в то время как RFC 2616 все еще зависал. Некоторые ответы на этот вопрос основаны на таком документе, который больше не актуален в настоящее время. Цитировать Марк Ноттингем , который на момент написания статьи являлся сопредседателем рабочих групп IETF HTTP и QUIC:

Не используйте RFC2616 . Удалите его со своих жестких дисков, закладок и запишите (или ответственно переработайте) все распечатанные копии.

Старый RFC 2616 был заменен следующими документами, которые вместе определяют протокол HTTP / 1.1:

Таким образом, я стремлюсь предоставить ответ на основе RFC 7231 , который является текущей ссылкой для кодов состояния HTTP / 1.1.

Код состояния 302

Ответ с 302 является распространенным способом выполнения перенаправления URL. Вместе с кодом состояния 302 ответ должен включать заголовок Location с другим URI. Такой заголовок будет прочитан пользовательским агентом и затем выполнит перенаправление:


Redirection example


Веб-браузеры могут измениться с POST на GET в следующем запросе. Если это поведение нежелательно, вместо него можно использовать код состояния 307 (временное перенаправление).

Вот как код состояния 302 определяется в RFC 7231 :

6.4.3. 302 найдено

Код состояния 302 (Найдено) указывает, что целевой ресурс временно находится под другим URI. С момента перенаправления может быть изменен в случае необходимости, клиент должен продолжать использовать действующий URI запроса для будущих запросов.

Сервер ДОЛЖЕН сгенерировать поле заголовка Location в ответе содержащий ссылку на URI для другого URI. Пользовательский агент МОЖЕТ используйте значение поля Location для автоматического перенаправления. Сервера полезный груз ответа обычно содержит короткую гипертекстовую заметку с гиперссылка на другой URI.

Примечание: По историческим причинам пользовательский агент МОЖЕТ изменить запрос метод от POST до GET для последующего запроса. Если это поведение нежелательно, код состояния 307 (временное перенаправление) можно использовать вместо.

Согласно веб-документам MDN от Mozilla , типичный вариант использования 302:

Веб-страница временно недоступна по причинам, которые не были непредвиденными. Таким образом, поисковые системы не обновляют свои ссылки.

Другие коды состояния для перенаправления

RFC 7231 определяет следующие коды состояния для перенаправления:

  • 301 (постоянно перемещено)
  • 302 (найдено)
  • 307 (временное перенаправление)

RFC 7238 был создан для определения другого кода состояния для перенаправления:

  • 308 (постоянное перенаправление)

См. Этот ответ для получения более подробной информации.

24 голосов
/ 10 июня 2009

Простой способ взглянуть на HTTP 301 против 302 перенаправлений:

Предположим, у вас есть закладка для "http://sample.com/sample".. Вы используете браузер, чтобы перейти туда.

Переадресация 302 на другой URL в этот момент будет означать, что вы должны оставить закладку на "http://sample.com/sample".. Это потому, что целевой URL может измениться в будущем.

Перенаправление 301 на другой URL будет означать, что ваша закладка должна измениться, чтобы указывать на новый URL, поскольку это постоянное перенаправление.

10 голосов
/ 10 июня 2009

С RFC 2616 (спецификация протокола передачи гипертекста) :

10.3.3 302 Found

   The requested resource resides temporarily under a different URI.
   Since the redirection might be altered on occasion, the client SHOULD
   continue to use the Request-URI for future requests.  This response
   is only cacheable if indicated by a Cache-Control or Expires header
   field.

   The temporary URI SHOULD be given by the Location field in the
   response. Unless the request method was HEAD, the entity of the
   response SHOULD contain a short hypertext note with a hyperlink to
   the new URI(s).

Источник:

http://www.ietf.org/rfc/rfc2616.txt

5 голосов
/ 03 декабря 2012

В терминах SEO, 301 и 302 оба хороши, это зависит от ситуации,

Если можно вернуть только одну версию (то есть другую перенаправить на нее), это здорово! Такое поведение полезно, потому что оно уменьшает дублирующийся контент. В конкретном случае перенаправлений на URL-адреса с косой чертой в результатах поиска, скорее всего, будет показана версия URL-адреса с кодом ответа 200 (чаще всего с URL-адресом с косой чертой) - независимо от того, было ли перенаправление 301 или 302.

5 голосов
/ 10 июня 2009

302 - ответ, указывающий на изменение местоположения ресурса - «Найдено».

URL-адрес, где должен располагаться ресурс, должен находиться в заголовке ответа «Местоположение».

«Переход» должен быть сделан запрашивающим клиентом (сделать новый запрос к URL ресурса в поле заголовка Location ответа).

5 голосов
/ 10 июня 2009

Согласно определениям кода состояния http 302 указывает (временное) перенаправление. «Запрашиваемый ресурс временно находится под другим URI»

4 голосов
/ 10 июня 2009

Из Википедия :

HTTP-код ответа 302 Найден самый распространенный способ выполнение перенаправления. Это пример производственной практики противоречащий стандарту.

2 голосов
/ 10 июня 2009

HTTP-код 302 для перенаправления см. http://en.wikipedia.org/wiki/HTTP_302.

Он сообщает просмотру страницы, чтобы перейти в другое место и загрузить другую страницу. Его использование очень распространено.

1 голос
/ 31 января 2017

Согласно RFC 1945 / Протокол передачи гипертекста - HTTP / 1.0 :

   302 Moved Temporarily

   The requested resource resides temporarily under a different URL.
   Since the redirection may be altered on occasion, the client should
   continue to use the Request-URI for future requests.

   The URL must be given by the Location field in the response. Unless
   it was a HEAD request, the Entity-Body of the response should
   contain a short note with a hyperlink to the new URI(s).

   If the 302 status code is received in response to a request using
   the POST method, the user agent must not automatically redirect the
   request unless it can be confirmed by the user, since this might
   change the conditions under which the request was issued.

       Note: When automatically redirecting a POST request after
       receiving a 302 status code, some existing user agents will
       erroneously change it into a GET request.
...