Клиент-серверная архитектура
Клиент-серверная архитектура — это модель взаимодействия между двумя частями системы: клиентом и сервером. Клиент отправляет запросы серверу, а сервер обрабатывает эти запросы и отправляет ответ.
Основные компоненты:
- Клиент — это программа, которая запрашивает информацию или сервис у сервера. Пример: браузер, отправляющий запрос на сайт.
- Сервер — это программа, которая получает запросы от клиентов и отправляет ответы. Пример: веб-сервер, который обрабатывает запросы браузера и возвращает веб-страницы.
Пример:
Когда ты заходишь на сайт, браузер (клиент) отправляет запрос на сервер сайта. Сервер обрабатывает запрос и отправляет в ответ HTML-страницу, которая отображается у тебя в браузере. Например:
Как это работает:
- Запрос клиента: клиент отправляет запрос на сервер через интернет.
- Обработка на сервере: сервер получает запрос и обрабатывает его (например, получает данные из базы данных).
- Ответ сервера: сервер возвращает ответ, который клиент отображает.
Виды клиент-серверных архитектур:
- Одноуровневая: все запросы и ответы проходят между клиентом и одним сервером.
- Многоуровневая (трёхуровневая): данные хранятся на одном сервере (например, база данных), а приложения обрабатываются на другом (например, веб-сервер).
Пример с многоуровневой архитектурой:
- Клиент отправляет запрос на сервер приложения.
- Сервер приложения обрабатывает запрос и взаимодействует с сервером базы данных.
- Сервер базы данных отправляет данные обратно на сервер приложения, который передаёт их клиенту.
HTTP-запрос
HTTP-запрос — это сообщение, которое клиент (например, браузер) отправляет на сервер для получения информации или выполнения действия. Запрос состоит из следующих частей:
1. Стартовая строка (Request Line)
Определяет тип запроса, URL-адрес и версию протокола.
- Метод: определяет тип операции (GET, POST, PUT, DELETE и т.д.).
- URL: адрес ресурса на сервере.
- Версия протокола: указывает версию HTTP (например, HTTP/1.1).
GET
— метод запроса./profile/123
— путь к ресурсу (профиль пользователя с ID 123).HTTP/1.1
— версия HTTP.
2. Заголовки (Headers)
Передают дополнительную информацию о запросе, такую как тип данных, тип клиента (браузера), авторизацию и т.д. Каждая пара «ключ-значение» записывается в новой строке.
Host: example.com
— сервер, к которому направлен запрос.User-Agent: Mozilla/5.0
— информация о клиенте.Accept: text/html
— тип содержимого, который клиент ожидает получить (HTML в данном случае).Authorization
— используется для передачи токенов авторизации.
3. Тело (Body)
Тело запроса передаётся только в методах, которые требуют передачи данных (например, POST или PUT). В GET-запросах тело обычно отсутствует.
Структура HTTP-ответа
HTTP-ответ — это сообщение, которое сервер отправляет клиенту в ответ на запрос. Он также состоит из нескольких частей:
1. Стартовая строка (Status Line)
Содержит информацию о статусе запроса:
- Версия протокола: версия HTTP (например, HTTP/1.1).
- Код состояния: трёхзначное число, которое указывает результат запроса.
- Сообщение состояния: текстовое описание кода состояния.
Пример стартовой строки ответа:
2. Заголовки (Headers)
Содержат метаданные об ответе, такие как тип содержимого, длина данных, кэширование и т.д.
Content-Type: application/json
Content-Type: application/json
— тип данных в теле ответа (JSON).Content-Length: 347
— длина содержимого в байтах.
3. Тело (Body)
Содержит данные, которые сервер отправляет клиенту, например, HTML-страницу, JSON-объект или файл. Тело может отсутствовать в некоторых ответах, например, при коде 204 No Content.
{
"id": 123,
"name": "John Doe",
"email": "[email protected]"
}
Пример полного HTTP-запроса и ответа
GET /profile/123 HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept: application/json
Authorization: Bearer abc123
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 87
{
"id": 123,
"name": "John Doe",
"email": "[email protected]"
}