Перейти к основному содержимому

Клиент-серверное взаимодействие

·968 слов·5 минут
Оглавление

В этом посте вы узнаете:

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

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

image.png

Маршрут между клиентом и сервером
#

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

image.png

Посылка Почты России проходит похожую цепочку сортировочных пунктов до момента вручения получателю. Далее я не буду рисовать в каждой схеме маршрутизаторов-посредников, но считайте, что они там есть :)

Язык общения между клиентом и сервером
#

Для передачи информации люди используют язык как средство общения. Язык предоставляет набор правил и слов для использования всеми участниками диалога. Это позволяет нам понимать друг друга.

Клиенту и серверу необходим язык общения, и в Интернете наиболее распространенным языком являются HTTP и HTTPS.

image.png

Что такое URL
#

Рассмотрим взаимодействие клиента и сервера на примере открытия адреса https://yandex.ru/maps в браузере.

Этот адрес называется URL (Uniform Resource Locator) — это адрес сайта или файла для скачивания в Интернете. URL состоит из нескольких частей:

image.png
  • протокол — обычно http или https (скоро узнаем, что это такое)

  • доменное имя — имя веб-сервера

  • порт — может отсутствовать, принято использовать 80 для http и 443 для https

  • адрес ресурса на сервере — адрес для обработки веб-сервером

  • дополнительные параметры — веб-сервер использует параметры при обработке запроса

См. также:

Что такое HTTP
#

HTTP (HyperText Transfer Protocol) — язык общения или протокол для обмена информацией между компьютерами. С помощью HTTP можно передавать текст, фотографии, видео и другие файлы.

Клиент и сервер оба понимают, как “общаться” на языке HTTP. Когда клиент отправляет HTTP-запрос, сервер понимает его и отправляет HTTP-ответ.

image.png

HTTP-запрос и HTTP-ответ состоят из двух частей: заголовки и тело запроса.

Можно провести аналогию с бумажными письмами. Заголовки и адрес на конверте — заголовки запроса, а текст письма — тело запроса.

Взаимодействие между клиентом и сервером выглядит следующим образом:

image.png

Структура HTTP-запроса и HTTP-ответа
#

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

HTTP-запрос состоит из нескольких составляющих:

image.png

А если простым языком: запроси страницу /maps на русском языке с сайта yandex.ru.

Метод сообщает серверу, какое действие нужно выполнить:

  • GET — запросить

  • POST — создать или запросить

  • DELETE — удалить

  • PUT — обновить

В результате сервер присылает HTTP-ответ:

image.png

Сервер нашел html-страницу, и теперь ее можно отобразить в браузере.

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

image.png

Приведу аналогию для закрепления. Предположим, вы заказали доставку еды:

  • Если вам ее доставили, то это 2xx

  • Если вы ищете Макдональдс, а возвращается Вкусно и точка, то это 3xx

  • Если при оплате еды не хватило денег на карте, то еду никто не доставит из-за ошибки на стороне клиента — 4xx

  • Если при попытке заказа еды вы увидели ошибку “Что-то пошло не так”, то на стороне сервера проблемы. Привет, 5xx!

Как посмотреть HTTP-запросы и HTTP-ответы в браузере?
#

Заголовки и тело ответа можно посмотреть в браузере:

  1. Откройте в Яндекс Браузере адрес https://yandex.ru/maps .
  2. Откройте DevTools и обновите страницу.
  3. На вкладке Doc выберите самый первый документ.

Вы должны увидеть весь список заголовков на вкладке Headers.

image.png

См. также:

Зачем нужен HTTPS
#

Протокол HTTP не защищает передаваемые данные, и злоумышленник может их перехватить.

image.png

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

image.png

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

We need to go deeper…
#

Взаимодействие клиента и сервера на самом деле происходит так:

image.png

Взаимодействие клиента и сервера можно представить как бассейн с несколькими слоями жидкости. Каждый запрос проходит через эти слои, а затем возвращается обратно.

Сообщения протокола 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-серверах.

image.png

Браузер обменивает доменное имя на IP-адрес и после этого находит Яндекс.

Общая схема работы
#

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

image.png

См. также: