программное обеспечение, которое работает на сервере и доступно пользователю через веб-браузер или клиентское приложение с помощью сети Интернет
устройство, с которого пользователь отправляет запросы
система, которая обрабатывает запросы, выполняет нужные вычисления или получает информацию из базы данных и отправляет ответ обратно клиенту
Вся обработка данных и выполнение операций происходит на одном сервере
взаимодействуют несколько уровней: клиент, сервер и база данных
Архитектурный стиль, который использует HTTP-методы (GET, POST, PUT, DELETE) для обмена данными между клиентом и сервером
Браузер инициирует запросы, отправляя HTTP-запросы на сервер
Браузер интерпретирует полученные данные (HTML, CSS, JavaScript) и отображает их в виде визуальной страницы
Браузер передает действия пользователя (клики, ввод текста и т. д.) серверу через дополнительные HTTP-запросы
Браузер выполняет JavaScript, который может взаимодействовать с сервером через AJAX-запросы или обновлять DOM для отображения динамических данных
Клиент (браузер) отправляет запрос на сервер, в котором могут содержаться параметры, указывающие, какую именно информацию или ресурс хочет получить пользователь
Сервер принимает запрос и обрабатывает его, возможно, обращаясь к базе данных или выполняя нужные вычисления
Сервер отправляет ответ в виде HTML-страницы или других данных (например, JSON).
Браузер получает ответ от сервера и отображает информацию на экране пользователя
Пользователь вводит URL
http://example.com/index.html
в браузере. Это инициирует следующий GET-запрос:
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36
Сервер получает запрос, обрабатывает его и отправляет ответ с содержимым страницы
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 1234
<html>
<head><title>Example Page</title></head>
<body>Welcome to Example.com
</body>
</html>
Браузер получает HTML-код и отрисовывает страницу, показывая пользователю приветственное сообщени
основной протокол, используемый для передачи данных. Он определяет правила, по которым браузеры (клиенты) и серверы обмениваются информацией
определяет тип запроса и целевой ресурс
GET /index.html HTTP/1.1
GET
- HTTP-метод (операция, которая должна быть
выполнена)
/index.html
- путь к ресурсу на сервере
HTTP/1.1
- версия HTTP-протокола
содержат дополнительную информацию о запросе, такую как тип содержимого, язык и предпочтения пользователя
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36
Accept-Language: en-US,en;q=0.9
может содержать данные, отправляемые на сервер
username=admin&password=12345
методы определяют, что клиент хочет сделать с данным ресурсом
используется для получения данных с сервера
используется для отправки данных на сервер
свойство операции, при котором повторное выполнение этой операции дает тот же результат, что и единичное выполнение
GET
: Повторный запрос ресурса не изменяет его
состояние.
PUT
: Повторное обновление ресурса одинаковыми данными
приводит к тому же результату.
DELETE
: Повторное удаление ресурса не изменяет состояние,
если он уже был удалён.
методы определяют, что клиент хочет сделать с данным ресурсом
используется для удаления ресурса с сервера
похож на GET, но сервер возвращает только заголовки ответа без тела
используется для замены ресурса на сервере
используется для частичного обновления ресурса
fetch("https://mysite.ru/changeUser", {
method: 'PUT',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({username: "admin", password: "qwe123"})
})
fetch("https://mysite.ru/changeUser", {
method: 'PATCH',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({password: "qwe123"})
})
содержит информацию о статусе ответа
HTTP/1.1 200 OK
HTTP/1.1
- версия HTTP
200
- код состояния (статус)
OK
- описание статуса
содержат метаданные о содержимом
Content-Type: text/html; charset=UTF-8
Content-Length: 1234
содержит сам контент, который сервер отправляет клиенту
<html>
<body>
Hello, World!
</body>
</html>
100 Continue
- сервер готов продолжить обработку
запроса
200 OK
- запрос выполнен успешно
201 Created
- ресурс был успешно создан
301 Moved Permanently
- запрашиваемый ресурс был окончательно
перемещен
302 Found
- ресурс временно перемещен
400 Bad Request
- неправильный запрос
401 Unauthorized
- необходимо авторизоваться
404 Not Found
- ресурс не найден
500 Internal Server Error
- внутренняя ошибка сервера
503 Service Unavailable
- сервер недоступен
указывает на тип содержимого (например,
text/html
,
application/json
)
контролирует кэширование данных
используется для передачи данных авторизации, например, при отправке токенов
используется для установки cookies на клиенте
защищенная версия HTTP, которая использует SSL/TLS для шифрования данных, передаваемых между клиентом и сервером
Конфиденциальность
- данные, передаваемые через HTTPS, зашифрованы,
что делает их недоступными для третьих сторон
Целостность
- данные не могут быть изменены или повреждены
при передаче
Аутентификацию
- HTTPS позволяет удостовериться в подлинности
сервера, что помогает предотвратить атаки
man-in-the-middle
позволяет отправлять HTTP-запросы и получать ответы от сервера без перезагрузки страницы
С помощью JavaScript создается HTTP-запрос, который отправляется на сервер без обновления страницы. Этот запрос может быть как GET, так и POST.
let xhr = new XMLHttpRequest();
xhr.open("GET", "/api/data", true);
xhr.onload = function() {
if (xhr.status === 200) {
let response = JSON.parse(xhr.responseText);
document.getElementById("data-container").innerHTML = response.data;
}
};
xhr.send();
Сервер получает запрос, обрабатывает его (например, обновляет данные в базе данных или извлекает их) и формирует ответ, который возвращается клиенту
JavaScript на клиенте получает ответ от сервера, парсит его (например, из формата JSON) и обновляет части веб-страницы, изменяя только те элементы, которые требуют обновления
let xhr = new XMLHttpRequest();
xhr.open("GET", "/api/data", true);
xhr.onload = function() {
if (xhr.status === 200) {
let response = JSON.parse(xhr.responseText);
document.getElementById("data-container").innerHTML = response.data;
}
};
xhr.send();