Обзор редиректов: когда и какой редирект использовать

Prostoweb рассмотрит все существующие в настоящий момент виды перенаправлений (на главную, другой домен или страницу) и возможные ситуации, когда тот или иной вид нужно использовать. При создании сайта пользователи иногда сталкиваются с понятием "редирект". Эта калька произошла от английского слова redirect, что переводится как "перенаправление".





Основные понятия: протокол HTTP, кода ответа, перенаправление

Протокол HTTP, или Hypertext Transfer Protocol (протокол передачи гипертекста), - это основной протокол прикладного уровня, с помощью которого осуществляется всем привычный серфинг по Сети с помощью браузера. Характерной особенностью этого протокола является отсутствие данных о предыдущем состоянии между разными запросами клиента, выполненными с его помощью. На каждый запрос клиентского приложения (частным случаем которого является браузер) сервер, которому он был адресован, генерирует некоторый ответ. В начале каждого ответа находится один из предопределенных кодов, или статусов, ответа протокола HTTP, затем идут заголовки и может присутствовать тело ответа.

В рамках данной статьи будут рассмотрены только коды ответа для перенаправлений. Итак, для редиректов выделена группа кодов от 300 до 399. В предыдущей версии спецификации протокола HTTP было предусмотрено максимальное количество перенаправлений равное 5, поэтому при использовании редиректов нужно иметь в виду данное ограничение, которое до сих пор может быть реализовано в устаревших приложениях.

Само понятие перенаправления предполагает, что при получении кода ответа 3xx клиентское приложение, в частности браузер, самостоятельно или с помощью пользователя принимает решение о том, что нужно делать дальше.

Виды перенаправлений

На текущий момент существует 9 видов редиректов:

  • 300 Multiple Choices
  • 301 Moved Permanently
  • 302 Found
  • 303 See Other
  • 304 Not Modified
  • 305 Use Proxy
  • 306 Reserved
  • 307 Temporary Redirect
  • 308 Permanent Redirect

Далее подробно рассмотрим все эти виды и случаи, когда их нужно использовать.

Множественный выбор, Multiple Choices, HTTP-код 300

Используется когда один и тот же ресурс в Сети имеет несколько представлений, у каждого из которых есть свое расположение, для различных клиентов. Например, для пользователей, зашедших на сайт со стационарного ПК или ноутбука, будет показана обычная версия сайта, а для пользователей мобильных устройств отобразится облегченная версия сайта, которая учитывает особенности аппаратного обеспечения этих устройств. Пример несколько надуманный, т.к. для реализации подобного поведения ранее просто использовались другие протоколы передачи данных (например, WML), а сейчас используется адаптивная верстка.

Перемещено постоянно, Moved Permanently, HTTP-код 301

Это самый распространенный вид редиректа, с которым сталкивается каждый веб-мастер. Он сообщает клиентскому приложению, что запрашиваемый ресурс был перемещен и теперь находится по другому адресу. В чем же важность этого перенаправления? Рассмотрим примеры, когда не обойтись без 301-го редиректа.

  1. Публикация на сайте переносится в другой раздел или переименовывается,  и ее адрес автоматически изменяется программой управления сайтом. В данном случае использование 301-го перенаправления позволит обновить индекс поисковых систем и не потерять позиции, завоеванные с помощью поисковой оптимизации.
  2. Сайт переносится на новый домен. В этом случае до тех пор, пока есть контроль над старым доменом, нужно установить на нем перенаправление на новый домен, чтобы не потерять позиции в поисковых системах и посетителей/клиентов, которые запомнили адрес (например, в своих закладках) и заходят по прямой ссылке.
  3. Слияние сайтов, резервирование для сайта схожего по написанию домена или же имени домена в другой доменной зоне. Резервирование  может быть полезно, если мы хотим обезопасить себя от возможных сайтов-конкурентов с созвучным названием. При слиянии сайтов не стоит отказываться от ставшего ненужным домена, т.к. данная экономия может привести к большим потерям трафика или же облегчить выход в ту же нишу конкурента с использованием вашего старого доменного имени, которое успело набрать некоторый вес для поисковиков из-за всего возраста.

Найдено, Found, HTTP-код 302

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

Смотрите другие источники, See Other, HTTP-код 303

Появился в версии протокола HTTP 1.1. Во многом схож с кодом 302. Используется для более корректного перенаправления, если клиентское приложение использует для запроса метод POST (например, при отправке форм в браузере). При этом предложенный вместо запрошенного адрес ресурса является временным и не должен быть запомнен вызывающим приложением.

Не изменено, Not Modified, HTTP-код 304

Сообщает клиенту, что запрашиваемый ресурс не был изменен с момента времени, указанного в специальном заголовке запроса If-Modified-Since или If-Match. Активно используется в работе браузеров, когда на сервере включено кеширование содержимого сайта. Если запрашиваемая страница или другой ресурс (картинка, сценарий, стили оформления страницы) не были изменены, то браузер при получении кода ответа 304 не производит загрузку с сервера, а рассчитывает на свой локальный кеш. Это экономит пропускную способность канала клиента  и сервера  и приводит к ускорению загрузки содержимого. Например, при правильно настроенном кэшировании страница сайта, которую мы недавно посетили, будет грузиться на порядок быстрее, чем та, которую мы еще не смотрели.

Используйте прокси, Use Proxy, HTTP-код 305

Появился в версии протокола HTTP 1.1. Предписывает использовать для доступа к ресурсу прокси-сервер (промежуточный сервер), данные которого передаются в заголовке ответа Location. От пользователя в таком случае ничего не требуется делать, т.к. всю работу должна автоматически выполнить клиентская программа.

Переключите прокси-сервер, Switch Proxy, HTTP-код 306

Данный код использовался в предыдущей версии спецификации протокола. В настоящий момент код 306 не несет никакой смысловой нагрузки. Тем не менее, он остается зарезервирован.

Временное перенаправление, Temporary Redirect, HTTP-код 307

Появился в версии протокола HTTP 1.1 вместе с кодом 303 для разрешения коллизий с временным перенаправлением, которые существовали в предыдущей версии протокола HTTP при наличии только 302-го кода. При перенаправлении метод запроса не может быть изменен с POST на GET.

Постоянное перенаправление, Permanent Redirect, HTTP-код 308

Пока находится в стадии черновика. Является аналогом кода 301 за исключением того, что при перенаправлении метод запроса не может быть изменен с POST на GET. Использование кода 308 позволяет улучшить перенаправление запросов из HTML- форм по методу POST к ресурсам, которые поменяли свой адрес на постоянной основе. Он дополняет  набор кодов 301, 302, 307 для выполнения постоянных и временных перенаправлений.

В качестве заключения

При работе над сайтом веб-мастер должен хорошо понимать, когда и как устанавливать 301-редирект. Другие значимые статусы ответа используются исключительно веб-программистами или же программистами, которые работают над серверным программным обеспечением. Коды от 309 до 399 в настоящий момент не используются, но могут быть задействованы в будущем.

Материалы по теме

  1. Реестр кодов ответа в протоколе HTTP.
  2. Спецификация протокола HTTP версии 1.1 - RFC 2616.
  3. Краткое описание HTTP-кодов ответа.
  4. Черновик спецификации по HTTP Status Code 308.




Опубликовано на сайте: 27.11.2013

Автор: Евгений Свирский

Источник: http://www.prostoweb.com.ua/


Нужны деньги до зарплаты?

более 30 сервисов

Кредиты онлайн на карту за 15 минут

от 0,01%

ставка

до 180 дней

макс срок

до 20 000 грн.

макс сумма




Забавное видео

2-х летний малыш любит бросать. Смотрите, что получилось, когда родители купили ему баскетбольное кольцо!