HTTP (Hypertext Transfer Protocol) — прикладной протокол обмена сообщениями между клиентами и серверами. Изначально он создавался для передачи гипертекстовых документов. В модели OSI HTTP относят к прикладному уровню; в стеке TCP/IP — также к прикладному уровню.
Протокол HTTP работает по принципу клиент-сервер. Клиентское приложение формирует запрос и отправляет его на сервер, после чего сервер обрабатывает запрос, формирует ответ и передаёт его обратно клиенту. Структуры запроса и ответа HTTP/1.1 похожи: стартовая строка, заголовки и необязательное тело сообщения.
- Стартовая строка запроса состоит из метода, пути и версии протокола:
GET /index.html HTTP/1.1Стартовая строка ответа состоит из версии протокола, кода ответа и текстовой расшифровки ответа:HTTP/1.1 200 OK - Заголовки – это набор пар ключ-значение, например,
Content-Type: text/html; charset=utf-8. В заголовках передают метаданные запроса/ответа: язык пользователя, авторизацию, тип контента и т. д. - Тело запроса или ответа может отсутствовать либо содержать текстовые или бинарные данные. В HTTP/1.1 оно отделяется от заголовков пустой строкой. Обычный порт для HTTP — 80, для HTTPS — 443. HTTPS — это HTTP поверх TLS: TLS обеспечивает шифрование, целостность и аутентификацию сервера. Сегодня используются HTTP/1.1, HTTP/2 и HTTP/3. HTTP/2 обычно работает поверх TCP, а HTTP/3 — поверх QUIC, использующего UDP. Особенности HTTP/1.1:
- постоянные соединения используются по умолчанию; заголовок
Connection: closeсообщает, что соединение нужно закрыть после ответа; Нововведения HTTP/2: - бинарное фреймирование: сообщения передаются как последовательности типизированных фреймов;
- мультиплексирование: несколько потоков запросов и ответов могут одновременно использовать одно соединение;
- сжатие заголовков: используется формат HPACK;
- server push: протокол предусматривает отправку дополнительных ответов без отдельного запроса, однако браузеры больше не поддерживают эту возможность как практическую оптимизацию.
Стандарт HTTP/2 допускает работу без TLS, но современные браузеры практически используют его только поверх TLS.
HTTP методы
| Метод | Что делает | Пример эндпоинта | Safe | Idempotent |
| POST | отправляет данные на сервер | /photos | No | No |
| PUT | обновляет существующий ресурс, иногда может создавать новый; нужно передать полное представление ресурса | /photos/id | No | Yes |
| PATCH | вносит изменения в конкретный ресурс | /photos/id | No | No |
| GET | запрашивает информацию | /photos, /photos/id | Yes | Yes |
| HEAD | идентичен GET по семантике, но сервер не отправляет тело ответа | /photos, /photos/id | Yes | Yes |
| DELETE | удаляет ресурс | /photos/id | No | Yes |
| OPTIONS | запрашивает варианты взаимодействия с целевым ресурсом; часто используется для preflight-запросов CORS | /photos | Yes | Yes |
| TRACE | используется для тестирования и отладки соединения между клиентом и сервером | /photos | Yes | Yes |
Hello, World!
This is an example page.
``` ## Примеры кодов ответов - 1xx - информационные - `100 Continue` - запрос успешно принят и клиент может продолжать присылать запросы - `101 Switching Protocols` - присылается в ответ на запрос клиента, содержащий заголовок `Upgrade`, и указывает, что сервер переключился на согласованный протокол - 2хх - успешно - `200 OK` - запрос успешно обработан - `201 Created` - запрос выполнен и привёл к созданию одного или нескольких ресурсов - 3хх - перенаправление - `304 Not Modified` - условный GET или HEAD показал, что сохранённое клиентом представление всё ещё актуально - `307 Temporary Redirect` - временное перенаправление - 4хх - ошибка на стороне клиента - `401 Unauthorized` - для получения запрашиваемого ответа нужна аутентификация - `403 Forbidden` - у клиента нет прав доступа к содержимому - `404 Not Found` - сервер не может найти запрашиваемый ресурс - 5хх - ошибка на стороне сервера - `500 Internal Server Error` - сервер столкнулся с ситуацией, которую он не знает как обработать - `504 Gateway Timeout` - сервер, работающий как gateway или proxy, не получил своевременный ответ от upstream-сервера