Материал

HTTP

Этап roadmapHTTP и API →

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
**Идемпотентность** — свойство метода, при котором ожидаемый эффект нескольких одинаковых запросов на сервере совпадает с эффектом одного такого запроса. Ответы при этом могут различаться. PATCH по стандарту не обязан быть идемпотентным, но конкретный PATCH-запрос можно спроектировать идемпотентно. Пример запроса: ```http GET /index.html HTTP/1.1 Host: www.example.com User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:100.0) Gecko/20100101 Firefox/100.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Connection: keep-alive Upgrade-Insecure-Requests: 1 ``` Пример ответа: ```http HTTP/1.1 200 OK Date: Mon, 27 Nov 2023 12:00:00 GMT Server: Apache/2.4.29 (Unix) Last-Modified: Wed, 01 Nov 2023 10:00:00 GMT ETag: "a1f-5c001a1f364d8" Accept-Ranges: bytes Content-Type: text/html Example Page

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-сервера

Первичные источники