Зарегистрируйтесь, чтобы продолжить обучение

Протокол HTTP Ключевые аспекты веб-разработки на Python

Популярный вопрос на собеседовании веб-разработчиков часто звучит так: «Что происходит после того, как в браузер ввели адрес сайта?». Подробный ответ на этот вопрос можно найти на GitHub. Главное, что хочет услышать собеседующий — ваш уровень понимания HTTP. В этом уроке мы разберем подробнее именно эту тему.

Что такое HTTP

Чтобы лучше понять этот термин, вспомним что такое протокол — это набор соглашений или правил, по которым разные программы могут обмениваться информацией.

Один из самых распространенных протоколов в вебе — это HTTP (Hyper-Text Transferring Protocol). Это набор правил, который известен и вашему компьютеру, и физически отдаленному компьютеру. С помощью него браузер и веб-сервер общаются между собой.

Вы уже знаете, что такое веб-сервер — это программа, установленная на сервере и обслуживающая входящие соединения. Веб-сервер работает в два этапа:

  1. Сначала сервер получает от браузера информацию о том, какую страницу какого сайта мы хотим загрузить
  2. Затем сервер возвращает браузеру содержимое страницы этого сайта

Этот цикл «запрос-ответ» называется HTTP-сессией. Через программу curl посмотрим, как она выглядит:

curl -v --head https://ru.hexlet.io

* Trying 174.66.43.105:443...
* TCP_NODELAY set
* Connected to ru.hexlet.io (174.66.43.105) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: /etc/ssl/certs/ca-certificates.crt
  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use h2
* Server certificate:
*  subject: C=US; ST=California; L=San Francisco; O=Cloudflare, Inc.; CN=sni.cloudflaressl.com
*  start date: Dec 21 00:00:00 2021 GMT
*  expire date: Dec 20 23:59:59 2022 GMT
*  issuer: C=US; O=Cloudflare, Inc.; CN=Cloudflare Inc ECC CA-3
*  SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x560728425e30)
> HEAD / HTTP/2
> Host: ru.hexlet.io
> user-agent: curl/7.68.0
> accept: */*
>
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* old SSL session ID is stale, removing
* Connection state changed (MAX_CONCURRENT_STREAMS == 256)!
< HTTP/2 200
HTTP/2 200
< date: Wed, 09 Feb 2022 07:13:32 GMT
date: Wed, 09 Feb 2022 07:13:32 GMT
< content-type: text/html; charset=utf-8
content-type: text/html; charset=utf-8
...

<
* Connection #0 to host ru.hexlet.io left intact

Технологию HTTP нужно не просто знать. Важно еще и уметь делать сырые HTTP-запросы — не косвенно через браузер, а самостоятельно, эмулируя поведение браузера. Для этой задачи используют программу telnet. На Хекслете есть курс на эту тему — там вы всему и научитесь.

Зачем используется HTTP

Протокол HTTP применяется для множества различных задач:

  • В работе с формами, при загрузке файлов и при перенаправлении
  • Для аутентификации, ведь она целиком зависит от HTTP
  • Для извлечения информации о запросе — например, можно определить, из какого браузера был выполнен запрос
  • Для увеличения производительности и кеширования

Протокол HTTPS

Помимо HTTP, в сети большое распространение получил более безопасный протокол HTTPS. Если страница работает по протоколу HTTP, на ней не стоит выполнять действия, связанные с любыми секретными данными — например, кредитками. В таком случае ваши данные сможет прочитать любой человек, который обслуживает сайт или имеет доступ к оборудованию между вами и сервером.

Обратите внимание, что на популярных сайтах страницы оплаты всегда отдаются по HTTPS. В свою очередь, умение работать с HTTPS сразу добавляет новые понятия:

  • Шифрование, асимметричное шифрование
  • Сертификаты
  • Цифровая подпись

TCP/IP

Только протоколами HTTP и HTTPS обойтись не получится. Дело в том, что HTTP существует не сам по себе, а поверх стека протоколов TCP/IP. Базовое знание сетей важно по следующим причинам:

  • Для безопасности. Без базовых знаний легко совершить ошибку и быть взломанным
  • Для отладки. Даже с малейшими проблемами в работе сайтов сложно справиться без базовых знаний о сетях. Так происходит потому, что немалая часть вопросов запуска и конфигурирования сайтов связана с сетевыми сокетами

DNS

Еще один столп веба — служба доменных имен (DNS).

Представьте, что мы вбиваем адрес в браузер. В этот момент браузер выполняет DNS-запросы к соответствующим серверам и пытается выяснить, к какому IP-адресу принадлежит сайт. Дело в том, что соединение с сервером идет по TCP/IP, а не по HTTP. Протокол HTTP начинает работать уже после того, как было установлено TCP-соединение.

Знание DNS поможет:

  • Привязать домен к серверу
  • Настраивать почту для домена
  • Верифицировать проект различными сервисами
  • Быстрее и эффективнее проводить отладку, ведь нередко проблемы загрузки связаны с DNS

Как учить

Тема сетей достаточно подробно раскрыта в книгах по операционным системам. В списке рекомендуемых книг Хекслета есть как минимум один источник на эту тему.


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

  1. Курс по HTTP

Аватары экспертов Хекслета

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

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

Для полного доступа к курсу нужен базовый план

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

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

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

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

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

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
от 25 000 ₸ в месяц
Разработка веб-приложений на Django
10 месяцев
с нуля
Старт 26 декабря

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

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

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»