О чем этот материал
HTTP, REST, статусы, методы, заголовки, HTTPS и путь веб-запроса.
Это адаптированная версия учебной презентации: слайды разобраны в формате обычной статьи, чтобы материал было легче читать с телефона и возвращаться к нужным блокам позже.
Что внутри
Ниже краткий план материала. По нему удобно понять, в каком порядке разбирать тему.
- HTTP как основной протокол интернета
- REST API
- HTTPs
- Разберем вопросы
HTTP
Hyper Text Transfer Protocol - основной протокол передачи данных в интернете
Версии HTTP/0.9 ~/1.0 ~/1.1 ~/2 (возможно ~/3)
Методы: GET, POST, PUT …
Статус коды: 200, 404, 502 …
- протокол HTTP/HTTPs
- Доменное имя
- Путь
- Параметры запроса
Methods
Указание на основную операцию над ресурсом
передачи данных на сервер.
данными из запроса.
указанного ресурса.
- GET: Запрос на получение ресурса. Используется для запроса данных с сервера.
- POST: Отправка данных для создания или обновления ресурса. Используется для
- PUT: Замена или создание ресурса. Используется для замены текущего ресурса
- DELETE: Удаление ресурса. Используется для удаления данных с сервера.
- HEAD: Запрос аналогичен GET, но сервер должен вернуть только заголовки, без тела.
- OPTIONS: Запрос, который возвращает методы HTTP, поддерживаемые сервером для
- PATCH: Частичное обновление ресурса. Используется для внесения частичных
Status code
Код ответа - цифровое обозначение типа ответа, который мы получили от сервера.
Код ответа - цифровое обозначение типа ответа, который мы получили от сервера.
418 - I’m a teapot (буквально - “я - чайник”)
- 1xx - 100, 101 - запрос получен и продолжает обрабатываться
- 2xx - 200, 201 - запрос успешно обработан
- 3xx - 301, 302 - переадресация (в target должен быть указан путь)
- 4xx - 400, 401, 404 - ошибка со стороны клиента
- 5xx - 500, 502, 503 - ошибка со стороны сервера
Headers
General Headers («Основные заголовки») — могут включаться в любое сообщение клиента и сервера;
Request Headers («Заголовки запроса») — используются только в запросах клиента;
Response Headers («Заголовки ответа») — только для ответов от сервера;
Entity Headers («Заголовки сущности») — сопровождают каждую сущность сообщения.
URL (Uniform Resource Locator)
Протокол: Указывает используемый протокол (например, http или https).
Доменное Имя: Имя сервера, на котором размещен ресурс (например, www.example.com).
Путь: Путь к ресурсу на сервере (например, /index.html).
Параметры Запроса: Дополнительные параметры, передаваемые в запросе (например, ?id=123).
HandShake
Установление TCP-соединения
Обмен HTTP-запросами и ответами
Закрытие соединения
REST (REpresentational State Transfer )
Stateless (Без состояния):
запроса.
Client-Server (Клиент-сервер):
Cacheable (Кэшируемость):
- Каждый запрос от клиента к серверу должен содержать всю необходимую информацию для выполнения
- Клиенты отвечают за пользовательский интерфейс - серверы отвечают за управление данными и логикой.
- Ответы от сервера должны быть кэшируемыми, если это возможно.
- Идентификацию ресурсов (URI)
- HTTP: GET, POST, PUT, DELETE)
Немного криптографии
Шифрование:
может быть прочитан только тем, у кого есть соответствующий ключ для расшифровки.
кодирования сообщений так, чтобы только получатель с правильным ключом мог их прочитать.
Цифровая подпись:
- Цель: Обеспечение конфиденциальности данных.
- Процесс: Преобразование данных в такой формат, который
- Пример: Использование алгоритмов, таких как AES или RSA, для
- Цель: Обеспечение подлинности и целостности данных.
- Процесс: Создание уникального цифрового отпечатка (хеша)
- Пример: Использование алгоритмов, таких как DSA или RSA, для
Cимметричное шифрование
- Один ключ на все
Асимметричное шифрование
- Публичным ключом шифруем
- Приватным расшифровываем
HTTPs
SSL - Secure Sockets Layer - протокол безопасности для установления зашифрованных соединений.
TLS - Transport Layer Security - современный протокол, заменяющий SSL
- Handshake
- Проверка сертификата
- Генерация ключей
- Шифрование
- Расшифровка
Инструменты. Postman
Инструменты. Insomnia
Инструменты
Curl (cURL) - консольная утилита для выполнения HTTP запросов
Golang
“net/http"