Современные компьютеры, мобильные устройства и приложения обмениваются данными благодаря сетевому соединению. Оно может быть локальным (LAN), когда устройства находятся рядом, например дома или в офисе — типичный пример это компьютер, подключённый к роутеру по Wi-Fi. Глобальная сеть (WAN) связывает устройства через интернет, даже если они расположены в разных городах или странах.
Чтобы устройства могли корректно взаимодействовать, используются сетевые протоколы — заранее определённые правила обмена данными. Протокол определяет, как именно передаётся информация и как она должна интерпретироваться: как текст, изображение, видео или запрос на загрузку страницы.
Большинство интернет-приложений работает по модели клиент → сервер. Клиент отправляет запрос, сервер принимает его, обрабатывает и возвращает ответ. Например, при открытии страницы браузер отправляет запрос серверу, сервер формирует ответ с данными сайта, а браузер отображает их пользователю. Понимание этого взаимодействия важно для всех, кто работает с веб-системами, а для тестировщиков — особенно, поскольку значительная часть ошибок возникает именно на этапе обмена данными между клиентом и сервером.
Содержание
- Клиент и сервер: роли и ответственность
- Бизнес-логика, фронтенд и бэкенд
- База данных и балансировщик нагрузки
- URL и протоколы передачи данных
- Как происходит взаимодействие клиента и сервера
- Структура HTTP-запроса и ответа
- Форматы обмена данными: JSON и XML
- HTTP-методы и идемпотентность
- Важные коды состояния HTTP
- 2xx — успешные результаты
- 3xx — уведомления о смене адреса
- 4xx — ошибочные действия клиента
- 5xx — проблемы серверной стороны
- Типовой цикл взаимодействия в REST-API
- 1. Получение данных — метод GET
- 2. Создание нового пользователя — метод POST
- 3. Полная перезапись ресурса — метод PUT
- 4. Частичное изменение данных — метод PATCH
- 5. Удаление — метод DELETE
- Заключение

Клиент и сервер: роли и ответственность
Клиент — это сторона системы, которая отправляет запрос серверу и получает результат его обработки.
Клиентом может быть браузер (например, Chrome или Firefox), мобильное приложение, программа на компьютере, тестовый инструмент вроде Postman, а также другой сервер или микросервис. Основная задача клиента — сформировать корректный HTTP-запрос, указав метод (GET, POST и другие), путь к ресурсу, необходимые заголовки (тип данных, токен авторизации) и, при необходимости, параметры или тело запроса.
Важно понимать, что клиент не принимает решений, связанных с бизнес-логикой. Он лишь передаёт запрос и отображает результат, полученный от сервера.
Сервер — это программа или система, которая принимает запросы от клиентов, обрабатывает их по заданным правилам и возвращает ответ.
Именно сервер отвечает за «мозги» приложения — всё то, что происходит за кадром и недоступно пользователю напрямую.
Запросы к серверу могут быть статическими и динамическими. В случае статических запросов сервер просто отдаёт готовые файлы, такие как HTML-страницы, изображения, таблицы стилей или JavaScript-файлы. Динамические запросы требуют выполнения кода: веб-сервер передаёт управление приложению, написанному, например, на PHP, Python или Node.js, и уже оно формирует ответ на основе логики и данных.
Бизнес-логика, фронтенд и бэкенд
Бизнес-логика представляет собой набор правил, по которым функционирует приложение. Она определяет, как создаётся заказ, как рассчитывается цена, как обрабатывается оплата, кто и какие данные может видеть, а также как система реагирует на действия пользователя. Выполнение этих правил всегда обеспечивается серверной стороной.
Фронтенд — это часть приложения, работающая на стороне пользователя. Он отвечает за внешний вид и взаимодействие: отображение страниц, форм, кнопок, таблиц, сообщений об ошибках и анимаций. Фронтенд формирует пользовательские действия в запросы, понятные серверу, но не принимает окончательных решений.
Бэкенд — это серверный код и логика. Он обрабатывает данные, полученные от фронтенда, проверяет авторизацию и права доступа, взаимодействует с базой данных, выполняет расчёты и бизнес-логику и подготавливает ответ для клиента. Проще говоря, именно бэкенд решает, что делать с запросом и какие данные вернуть.
База данных и балансировщик нагрузки
База данных — это организованное хранилище информации, с которым работает сервер. В ней могут храниться данные пользователей, товаров, статьи, настройки, логи действий, транзакции и заказы. Базы данных обеспечивают быстрый поиск, обновление, удаление и обработку больших объёмов данных. В практике используются как реляционные базы данных (например, MySQL или PostgreSQL), основанные на таблицах и строгих связях, так и нереляционные решения (MongoDB, Redis), ориентированные на гибкость и производительность. Сервер взаимодействует с базой данных через запросы, чаще всего SQL.
В современных приложениях один сервер нередко не справляется с большим количеством пользователей. Для этого используется балансировщик нагрузки — компонент, который распределяет входящие запросы между несколькими серверами. Он повышает стабильность системы, предотвращает перегрузку отдельных узлов, обеспечивает отказоустойчивость и ускоряет обработку запросов. С точки зрения пользователя схема выглядит прозрачно: клиент отправляет запрос, балансировщик перенаправляет его на один из серверов, а результат возвращается обратно.
URL и протоколы передачи данных
URL (Uniform Resource Locator) — это уникальный адрес ресурса в сети. Он включает протокол, доменное имя, порт, путь к ресурсу, параметры запроса и, при необходимости, якорь.
Пример URL: https://api.example.com:443/users/123?active=true#info
Здесь https указывает на используемый протокол, api.example.com — домен, 443 — порт, /users/123 — путь к ресурсу, active=true — параметры запроса, а #info — якорь, который в API почти не используется.
HTTP является основным протоколом передачи данных между клиентом и сервером, но не шифрует трафик.
HTTPS — защищённая версия HTTP, использующая SSL/TLS для защиты данных от перехвата и подмены. Перед началом обмена по HTTPS выполняется TLS-рукопожатие, в ходе которого сервер отправляет сертификат, клиент проверяет его, и обе стороны формируют сессионный ключ для шифрования.
Как происходит взаимодействие клиента и сервера
Процесс начинается с установления соединения. Клиент подключается к серверу по TCP — надёжному протоколу транспортного уровня, обеспечивающему доставку данных в правильном порядке. Если используется HTTPS, дополнительно выполняется TLS-рукопожатие.
Затем клиент формирует и отправляет HTTP-запрос. Запрос включает метод (GET, POST, PUT, PATCH или DELETE), URI, заголовки, такие как Host, Authorization, Accept и Content-Type, а при необходимости — тело запроса.
Пример запроса:
После этого сервер обрабатывает запрос: проверяет метод, валидирует данные, проверяет токен и права доступа, выполняет бизнес-логику и обращается к базе данных. Затем сервер формирует HTTP-ответ, который содержит строку статуса, заголовки и тело данных.
Пример ответа:
По умолчанию соединение может сохраняться в режиме keep-alive, что позволяет использовать его для последующих запросов и ускоряет работу приложения.
Структура HTTP-запроса и ответа
HTTP-запрос — это сообщение, которое клиент отправляет серверу для получения данных или выполнения действия. Он включает метод, определяющий тип операции, URI — адрес ресурса, версию протокола, заголовки с служебной информацией (тип данных, авторизация, кеширование) и, при необходимости, тело запроса с передаваемыми данными.
HTTP-ответ — это сообщение сервера, возвращаемое клиенту в ответ на запрос. Он содержит строку статуса с версией протокола и кодом состояния, заголовки, описывающие формат и свойства ответа, а также тело с самими данными — HTML, JSON, XML или другим поддерживаемым форматом.
Для тестировщика важно анализировать все части запроса и ответа, так как ошибки могут возникать на любом уровне: в методе, URI, заголовках, теле запроса или статус-коде ответа. Понимание этой структуры позволяет корректно проверять клиент-серверное взаимодействие и быстрее находить причины дефектов.
Форматы обмена данными: JSON и XML
JSON — это лёгкий текстовый формат обмена данными, основанный на JavaScript. Он читаем, минималистичен, универсален и поддерживается всеми популярными языками программирования, что делает его идеальным выбором для REST API и обмена данными между приложениями.
Пример JSON:
XML — язык разметки для хранения и передачи структурированных данных. Он отличается строгим синтаксисом, расширяемостью и возможностью валидации структуры через схемы. XML широко используется в конфигурационных файлах, документации и SOAP-сервисах.
Пример XML:
Краткое сравнение JSON и XML:
| Критерий | JSON | XML |
|---|---|---|
| Структура | ключ-значение | теги |
| Объём данных | меньше | больше |
| Скорость обработки | высокая | ниже |
| Валидируемость | ограниченная | полная |
| Использование | REST API | интеграции, банки |
HTTP-методы и идемпотентность
HTTP-методы — это стандартные команды, которые клиент отправляет серверу для выполнения действий над ресурсами. Они лежат в основе REST-архитектуры и определяют, что именно сервер должен сделать с полученным запросом.
Метод GET используется для получения данных. Он считается безопасным, так как не изменяет состояние сервера, и идемпотентным — повторные запросы дают одинаковый результат. GET-запросы могут кешироваться, параметры чаще всего передаются через URL, а тело запроса использоваться не должно.
Метод POST предназначен для создания ресурсов или запуска действий. Он не является идемпотентным: повторный запрос может привести к созданию дубликатов. POST применяется при отправке форм, регистрации пользователей и загрузке файлов, а данные передаются в теле запроса. При успешном создании ресурса сервер обычно возвращает статус 201 Created.
Метод PUT полностью заменяет существующий ресурс новыми данными и считается идемпотентным. Клиент обязан передать объект целиком. В некоторых API PUT может создавать ресурс, если он отсутствует, но это определяется дизайном API.
Метод PATCH используется для частичного обновления ресурса. Он изменяет только указанные поля и может быть неидемпотентным в зависимости от реализации. PATCH экономичнее PUT, так как передаёт меньше данных и снижает риск перезаписи.
Метод DELETE удаляет ресурс и считается идемпотентным: повторный запрос не приводит к ошибке, так как объект уже удалён. Часто сервер возвращает статус 204 No Content. В некоторых системах применяется логическое удаление, когда ресурс помечается как удалённый.
Понятие идемпотентности означает, что повторный вызов метода приводит к тому же результату. GET не изменяет состояние, PUT и DELETE выполняют действие только один раз, тогда как POST при повторном вызове может изменить состояние системы, например создать дублирующего пользователя.
Важные коды состояния HTTP
2xx — успешные результаты
Эта группа сигнализирует, что сервер корректно обработал запрос.
200 OK — ответ сформирован и передан без ошибок.
201 Created — обработка запроса завершилась созданием нового ресурса.
3xx — уведомления о смене адреса
Клиенту предлагается перейти по другому URI.
301 / 302 — сервер сообщает, что нужный объект теперь расположен по новому пути (301 — постоянный перенос, 302 — временный).
4xx — ошибочные действия клиента
Ошибки вызваны неправильным запросом или отсутствием прав.
400 Bad Request — сервер не может понять запрос из-за неверного формата или структуры.
401 Unauthorized — требуется авторизация: нужен валидный токен.
403 Forbidden — учётные данные существуют, но доступ к ресурсу запрещён.
404 Not Found — по данному маршруту объект не найден.
405 Method Not Allowed — запрошенный HTTP-метод не поддерживается данным endpoint.
429 Too Many Requests — превышен лимит обращений за установленный промежуток времени.
5xx — проблемы серверной стороны
Указывают на сбой внутри сервера или приложения.
500 Internal Server Error — обработка запроса завершилась внутренней ошибкой.
503 Service Unavailable — временная недоступность сервера (обслуживание, перегрузка).
Типовой цикл взаимодействия в REST-API
1. Получение данных — метод GET
Ответный объект:
2. Создание нового пользователя — метод POST
Передаваемое тело запроса:
3. Полная перезапись ресурса — метод PUT
Сервер ожидает целиком весь объект:
4. Частичное изменение данных — метод PATCH
Обновляются только изменяемые свойства:
5. Удаление — метод DELETE
Удаляет ресурс с указанным идентификатором и возвращает 204 No Content.
Заключение
Клиент-серверная архитектура лежит в основе современных веб-приложений и API. Понимание структуры запросов и ответов, принципов работы HTTP-методов, форматов данных и сетевых протоколов позволяет тестировщику глубже анализировать поведение системы и быстрее находить дефекты. Эти знания формируют фундамент для уверенной работы с веб-сервисами, API и распределёнными приложениями.