В этом посте вы узнаете:
- о маршруте между клиентом и сервером
- как клиент и сервер общаются друг с другом
- что такое URL
- в чем разница между HTTP и HTTPS
- компоненты HTTP-запроса и HTTP-ответа
- что такое TCP и UDP
- и как все это связано вместе
В этом посте рассмотрим основы взаимодействия между клиентом и сервером. Узнаем, как клиент отправляет запросы и как они достигают сервера. Также рассмотрим язык общения между клиентом и сервером, а также структуру HTTP-запросов и HTTP-ответов.

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

Посылка Почты России проходит похожую цепочку сортировочных пунктов до момента вручения получателю. Далее я не буду рисовать в каждой схеме маршрутизаторов-посредников, но считайте, что они там есть :)
Язык общения между клиентом и сервером#
Для передачи информации люди используют язык как средство общения. Язык предоставляет набор правил и слов для использования всеми участниками диалога. Это позволяет нам понимать друг друга.
Клиенту и серверу необходим язык общения, и в Интернете наиболее распространенным языком являются HTTP и HTTPS.

Что такое URL#
Рассмотрим взаимодействие клиента и сервера на примере открытия адреса https://yandex.ru/maps в браузере.
Этот адрес называется URL (Uniform Resource Locator) — это адрес сайта или файла для скачивания в Интернете. URL состоит из нескольких частей:

протокол — обычно http или https (скоро узнаем, что это такое)
доменное имя — имя веб-сервера
порт — может отсутствовать, принято использовать 80 для http и 443 для https
адрес ресурса на сервере — адрес для обработки веб-сервером
дополнительные параметры — веб-сервер использует параметры при обработке запроса
См. также:
- Что такое URL на MDN
Что такое HTTP#
HTTP (HyperText Transfer Protocol) — язык общения или протокол для обмена информацией между компьютерами. С помощью HTTP можно передавать текст, фотографии, видео и другие файлы.
Клиент и сервер оба понимают, как “общаться” на языке HTTP. Когда клиент отправляет HTTP-запрос, сервер понимает его и отправляет HTTP-ответ.

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

Структура HTTP-запроса и HTTP-ответа#
Необязательно знать все составляющие HTTP-запроса и HTTP-ответа, но знание их структуры поможет вам понять полную картину.
HTTP-запрос состоит из нескольких составляющих:

А если простым языком: запроси страницу /maps на русском языке с сайта yandex.ru.
Метод сообщает серверу, какое действие нужно выполнить:
GET — запросить
POST — создать или запросить
DELETE — удалить
PUT — обновить
В результате сервер присылает HTTP-ответ:

Сервер нашел html-страницу, и теперь ее можно отобразить в браузере.
Коды ответа могут быть разными, но нам важна только первая цифра, объясняющая что произошло.

Приведу аналогию для закрепления. Предположим, вы заказали доставку еды:
Если вам ее доставили, то это
2xxЕсли вы ищете Макдональдс, а возвращается Вкусно и точка, то это
3xxЕсли при оплате еды не хватило денег на карте, то еду никто не доставит из-за ошибки на стороне клиента —
4xxЕсли при попытке заказа еды вы увидели ошибку “Что-то пошло не так”, то на стороне сервера проблемы. Привет,
5xx!
Как посмотреть HTTP-запросы и HTTP-ответы в браузере?#
Заголовки и тело ответа можно посмотреть в браузере:
- Откройте в Яндекс Браузере адрес https://yandex.ru/maps .
- Откройте DevTools и обновите страницу.
- На вкладке
Docвыберите самый первый документ.
Вы должны увидеть весь список заголовков на вкладке Headers.

См. также:
- Обзор протокола HTTP на MDN
- Сообщения HTTP на MDN
Зачем нужен HTTPS#
Протокол HTTP не защищает передаваемые данные, и злоумышленник может их перехватить.

Для решения проблемы безопасности был придуман протокол HTTPS — расширение протокола HTTP с поддержкой шифрования.

Просто запомните, что HTTP — прошлый век. Сейчас весь мир использует HTTPS. Если вы видите в строке своего браузера перечеркнутый замочек, то веб-сайт работает по HTTP. Обычно такое происходит из-за ошибок разработчиков. Но иногда злоумышленники намеренно используют протокол HTTP, чтобы украсть ваши личные данные. Лучше такие сайты избегать.
We need to go deeper…#
Взаимодействие клиента и сервера на самом деле происходит так:

Взаимодействие клиента и сервера можно представить как бассейн с несколькими слоями жидкости. Каждый запрос проходит через эти слои, а затем возвращается обратно.
Сообщения протокола HTTP и HTTPS передаются с одного уровня на другой. В конечном счете эти сообщения преобразуются в сигнал для передачи по проводам или воздуху (физический уровень).
Для полного понимания можно упомянуть про TCP и UDP. Это своего рода дороги между клиентом и сервером — соединение. TCP гарантирует доставку сообщения, а UDP — нет.
Можно сказать, что на “дорогах” TCP всегда соблюдается скоростной режим, и сообщения доходят до пункта назначения. В случае UDP, с другой стороны, скорость может быть высокой, но сообщения могут быть потеряны.
В контексте браузера используется TCP-соединение для обеспечения надежной передачи данных. А вот в играх на приставке используется UDP из-за его скорости.
Теперь две разработческие шутки:
Я знаю отличную шутку про UDP, но не факт, что она до вас дойдет. Я знаю отличную шутку про TCP, но если она до вас не дойдет, то я повторю
Если вы их поняли, то поздравляю — вы успешно усвоили разницу между TCP и UDP :)
Клиент и сервер не знают имен друг друга#
На предыдущей картинке есть два важных кубика — DNS и IP. Они помогут объяснить, как общаются компьютеры внутри любой сети.
Компьютеры обращаются друг к другу по IP-адресам, которые выглядят как 77.88.55.88 или 2a02:6b8:a::a.
Запомнить такие адреса людям сложно, поэтому придумали доменные имена в качестве ярлыков к IP-адресам. Хранятся эти соответствия на специальных DNS-серверах.

Браузер обменивает доменное имя на IP-адрес и после этого находит Яндекс.
Общая схема работы#
Настал момент, когда можно собой гордиться, т.к. вы понимаете всю схему взаимодействия клиента и сервера.

См. также:
Как работает Интернет на MDN
Как работает Веб на MDN
Что такое HTTP и зачем он нужен на Skillbox