156 lines
7.1 KiB
Markdown
156 lines
7.1 KiB
Markdown
---
|
|
title: HTTP, HTTPS и HTTP/3
|
|
status: processing
|
|
type: concept
|
|
tags: [web, network, networking, protocols, http, https, http3]
|
|
created: 2026-06-04
|
|
updated: 2026-06-05
|
|
source: "[[00_базовые_понятия.pdf]]"
|
|
aliases:
|
|
- HTTP, HTTPS и HTTP/3
|
|
---
|
|
# HTTP, HTTPS и HTTP/3
|
|
|
|
HTTP (HyperText Transfer Protocol) — прикладной протокол для доступа к ресурсам WWW. Клиент и сервер обмениваются отдельными сообщениями: клиент отправляет HTTP-запрос, сервер возвращает HTTP-ответ.
|
|
|
|
## Главное
|
|
|
|
- HTTP сам по себе не хранит состояние между запросами. Сессии поверх HTTP обычно поддерживаются через cookies или токены.
|
|
- HTTP/1.0 часто открывал новое TCP-соединение на каждый обмен запросом и ответом.
|
|
- HTTP/1.1 добавил постоянные соединения и конвейерную обработку.
|
|
- HTTP/2 использует бинарные фреймы, сжатие заголовков и мультиплексирование нескольких потоков в одном TCP-соединении.
|
|
- HTTPS — это HTTP поверх TLS. Он защищает конфиденциальность, целостность и аутентичность соединения.
|
|
- HTTP/3 переносит семантику HTTP на QUIC поверх UDP и уменьшает проблему head-of-line blocking.
|
|
|
|
## HTTP-запрос
|
|
|
|
Стартовая строка запроса состоит из метода, цели запроса и версии протокола:
|
|
|
|
```http
|
|
GET /index.html HTTP/1.1
|
|
```
|
|
|
|
Основные методы:
|
|
|
|
| Метод | Что делает |
|
|
|-------|------------|
|
|
| `GET` | Получить ресурс; параметры часто передаются в query string. |
|
|
| `POST` | Отправить данные на сервер: форма, JSON, файл. |
|
|
| `HEAD` | Получить только заголовки, как у `GET`, без тела ответа. |
|
|
| `PUT` | Создать или полностью заменить ресурс. |
|
|
| `PATCH` | Частично изменить ресурс. |
|
|
| `DELETE` | Удалить ресурс. |
|
|
| `OPTIONS` | Узнать доступные методы/возможности сервера. |
|
|
|
|
## HTTP-сообщение
|
|
|
|
И запрос, и ответ имеют общую структуру:
|
|
|
|
1. Стартовая строка.
|
|
2. Заголовки.
|
|
3. Пустая строка.
|
|
4. Необязательное тело.
|
|
|
|
Заголовок записывается как `Имя-Заголовка: значение`. Имя не чувствительно к регистру.
|
|
|
|
Частые заголовки запроса:
|
|
|
|
- `Host` — конкретный домен или IP, к которому обращается клиент.
|
|
- `User-Agent` — сведения о клиенте: браузер, ОС, версия.
|
|
- `Accept` — какие типы данных клиент готов принять.
|
|
- `Cookie` — cookies клиента.
|
|
- `Authorization` — данные аутентификации, например Bearer-токен.
|
|
|
|
## HTTP-ответ
|
|
|
|
Строка статуса ответа содержит версию протокола, код состояния и текстовое пояснение:
|
|
|
|
```http
|
|
HTTP/1.1 200 OK
|
|
```
|
|
|
|
Классы кодов:
|
|
|
|
- `1xx` — информационные.
|
|
- `2xx` — успешная обработка.
|
|
- `3xx` — перенаправление.
|
|
- `4xx` — ошибка клиента.
|
|
- `5xx` — ошибка сервера.
|
|
|
|
Частые коды:
|
|
|
|
- `200 OK` — запрос успешно обработан.
|
|
- `302 Found` — временное перенаправление.
|
|
- `400 Bad Request` — некорректный запрос.
|
|
- `403 Forbidden` — доступ запрещён.
|
|
- `404 Not Found` — ресурс не найден.
|
|
- `500 Internal Server Error` — внутренняя ошибка сервера.
|
|
|
|
## HTTPS
|
|
|
|
HTTPS использует TLS поверх TCP-соединения. Порт по умолчанию — `443`, у обычного HTTP — `80`.
|
|
|
|
Базовый смысл TLS:
|
|
|
|
- сервер предъявляет сертификат;
|
|
- клиент проверяет сертификат через центр сертификации;
|
|
- стороны согласуют ключи;
|
|
- дальнейший трафик шифруется и защищается от подмены.
|
|
|
|
SSL — устаревшее название семейства протоколов, в современных системах фактически используется TLS, но термин "SSL-сертификат" всё ещё распространён.
|
|
|
|
## HTTP/3
|
|
|
|
HTTP/3 работает поверх QUIC, а QUIC работает поверх UDP. QUIC объединяет надёжную доставку, шифрование TLS 1.3 и управление потоками.
|
|
|
|
Ключевые отличия:
|
|
|
|
| HTTP/2 | HTTP/3 |
|
|
|--------|--------|
|
|
| Поверх TCP | Поверх UDP/QUIC |
|
|
| TLS-хендшейк отдельно | TLS 1.3 встроен в QUIC |
|
|
| Потеря TCP-пакета может блокировать все потоки | Потеря пакета влияет только на конкретный поток |
|
|
| Соединение привязано к IP/порту | QUIC поддерживает connection migration через connection ID |
|
|
|
|
HTTP/3 не меняет смысл методов, заголовков и кодов ответа. Меняется транспортный слой.
|
|
|
|
## Простыми словами для экзамена
|
|
|
|
HTTP — это правила разговора браузера и сервера.
|
|
|
|
Запрос отвечает на вопрос: "что клиент хочет?". Ответ отвечает: "что сервер вернул?".
|
|
|
|
Пример GET:
|
|
|
|
```http
|
|
GET /posts/?page=2 HTTP/1.1
|
|
Host: example.com
|
|
```
|
|
|
|
Пример POST:
|
|
|
|
```http
|
|
POST /login/ HTTP/1.1
|
|
Host: example.com
|
|
Content-Type: application/x-www-form-urlencoded
|
|
|
|
username=ivan&password=secret
|
|
```
|
|
|
|
Главное различие:
|
|
|
|
- `GET` обычно получает данные; параметры видны в URL.
|
|
- `POST` обычно отправляет данные в теле запроса; подходит для форм, создания объектов, логина.
|
|
|
|
HTTPS — это не "другой HTTP", а HTTP внутри защищённого TLS-соединения. Порт HTTP — `80`, HTTPS — `443`.
|
|
|
|
HTTP/3 использует QUIC поверх UDP. Для экзамена достаточно помнить: HTTP/3 уменьшает задержки и проблему блокировки потоков при потере пакетов.
|
|
|
|
## Связи
|
|
|
|
- [[TCP vs UDP]]
|
|
- [[IP-адрес]]
|
|
- [[DNS]]
|
|
- [[URI, URL, URN]]
|
|
- [[Сетевые порты]]
|