Ошибки, сложный материал, вопросы >
Нашли опечатку или неточность?

Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос нашим менторам. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.
Об обучении на Хекслете
Протокол HTTP

Перенаправления

Давайте посмотрим, как в HTTP работают редиректы. Если сделать запрос на hexlet.io, то в ответ мы получим редирект:

telnet hexlet.io 80
GET / HTTP/1.1
host: hexlet.io

HTTP/1.1 301 Moved Permanently
Date: Thu, 14 May 2020 15:00:05 GMT
Transfer-Encoding: chunked
Connection: keep-alive
Cache-Control: max-age=3600
Expires: Thu, 14 May 2020 16:00:05 GMT
Location: https://hexlet.io/
Server: cloudflare
CF-RAY: 59357c73fadaf2a0-WAW
cf-request-id: 02b54c363b0000f2a07c8f0200000001

0

Это связано с тем что, hexlet.io работает только по HTTPS. Но HTTP он тоже обрабатывает. Ведь браузеру, который будет обращаться к сайту, нужно подсказать, что нужно сделать редирект.

301 Redirect

Как это работает? Возвращается заголовок 300 (формат редиректов). В нашем примере мы видим 301 Moved Permanently. Это означает, что ресурс, на который послали запрос, перемещён навсегда, и больше не имеет смысла сюда никогда заходить. Этим активно пользуются при SEO. Поисковики сохраняют все параметры страниц по старому адресу в индексе.

Редиректы бывают разных видов, например, временный редирект 302 Found. Он используется, если что-то произошло: сайт не работает, заблокирован и т.д. В основном это технические истории.

Но как узнать, куда происходит перенаправление? И вновь никакой магии — всё основано на заголовках. В принципе не важен даже body. В зависмости от того, как работает система, через которую послан запрос, body может отобразиться, а может и нет. Главное, что появляется заголовок Location. Он обязан быть в случае такого статуса ответа, который указывает то место, куда нужно перейти.

Всё. Дальше, браузер сделал бы перенаправление автоматически. Но так как мы находимся в telnet, то никакую работу он за нас не делает и просто возвращает этот редирект.

Иногда на сайтах происходят ошибки, и те постоянно выдают редиректы. Браузер будет пытаться бесконечно переходить по ним. Чтобы не убить систему, существуют различные защиты. Например, они умеют отслеживать циклические редиректы, и сообщать о том, что необходимо остановить работу.

Библиотеки, с которыми часто работают программисты, обычно имеют опции, которые говорят, нужно ли следовать за редиректом, и если следовать, то на какую глубину.


Дополнительные материалы

  1. HTTP 301

<span class="translation_missing" title="translation missing: ru.web.courses.lessons.mentors.mentor_avatars">Mentor Avatars</span>

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят менторы из команды Хекслета или другие студенты.

Для полного доступа к курсу нужна профессиональная подписка

Профессиональная подписка откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, даст возможность обращаться за помощью к менторам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
115
курсов
892
упражнения
2241
час теории
3196
тестов

Зарегистрироваться

или войти в аккаунт

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.

  • 115 курсов, 2000+ часов теории
  • 800 практических заданий в браузере
  • 250 000 студентов

Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг».

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Rambler
Логотип компании Bookmate
Логотип компании Botmother

Есть вопрос или хотите участвовать в обсуждении?

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг».