Основы HTTP

Основы HTTP

HTTP (HyperText Transfer Protocol) - это протокол передачи данных, который лежит в основе всего веба. Каждый раз, когда вы открываете сайт, ваш браузер общается с сервером именно по HTTP. Подробнее про устройство веба - в уроке как работает веб.

Что такое HTTP?

Анатомия HTTP-запроса и ответа: метод, путь, заголовки, тело, статус

HTTP - это текстовый протокол типа "запрос-ответ":

  • Клиент (браузер, мобильное приложение, curl) отправляет запрос
  • Сервер обрабатывает его и возвращает ответ

Простой пример HTTP-запроса:

GET /api/users HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept: application/json

И ответ сервера:

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 52

{"id": 1, "name": "Alice", "email": "alice@example.com"}

Методы HTTP

Основные методы (глаголы) HTTP:

GET - получение данных

curl -X GET https://api.example.com/users/123
  • Не должен изменять данные на сервере
  • Параметры передаются в URL
  • Можно кешировать
  • Безопасный и идемпотентный

POST - создание ресурса

curl -X POST https://api.example.com/users \
 -H "Content-Type: application/json" \
 -d '{"name": "Bob", "email": "bob@example.com"}'
  • Создаёт новый ресурс
  • Данные передаются в теле запроса
  • Не идемпотентный (каждый вызов создаёт новый ресурс)

PUT - полное обновление

curl -X PUT https://api.example.com/users/123 \
 -H "Content-Type: application/json" \
 -d '{"name": "Bob Updated", "email": "bob@example.com"}'
  • Заменяет весь ресурс целиком
  • Идемпотентный (повторные вызовы дают тот же результат)

PATCH - частичное обновление

curl -X PATCH https://api.example.com/users/123 \
 -H "Content-Type: application/json" \
 -d '{"name": "Bob Smith"}'
  • Обновляет только указанные поля
  • Более эффективен для больших объектов

DELETE - удаление

curl -X DELETE https://api.example.com/users/123
  • Удаляет ресурс
  • Идемпотентный

Коды ответов

HTTP использует числовые коды для обозначения результата обработки запроса:

2xx - Успех

  • 200 OK - всё хорошо
  • 201 Created - ресурс создан (обычно после POST)
  • 204 No Content - успех, но нет данных для возврата

3xx - Перенаправление

  • 301 Moved Permanently - ресурс переехал навсегда
  • 302 Found - временное перенаправление
  • 304 Not Modified - ресурс не изменился (для кеширования)

4xx - Ошибка клиента

  • 400 Bad Request - неверный формат запроса
  • 401 Unauthorized - требуется аутентификация
  • 403 Forbidden - доступ запрещён
  • 404 Not Found - ресурс не найден
  • 422 Unprocessable Entity - неверные данные

5xx - Ошибка сервера

  • 500 Internal Server Error - общая ошибка сервера
  • 502 Bad Gateway - ошибка прокси-сервера
  • 503 Service Unavailable - сервис временно недоступен

Заголовки HTTP

Заголовки передают дополнительную информацию о запросе или ответе.

Важные заголовки запроса:

Host: api.example.com
User-Agent: MyApp/1.0
Accept: application/json
Content-Type: application/json
Authorization: Bearer token123

Важные заголовки ответа:

Content-Type: application/json
Content-Length: 1234
Cache-Control: max-age=3600
Set-Cookie: session=abc123

Практический пример

Давайте посмотрим на реальное взаимодействие с API:

# 1. Получаем список пользователей
curl -i https://jsonplaceholder.typicode.com/users

# 2. Получаем конкретного пользователя
curl -i https://jsonplaceholder.typicode.com/users/1

# 3. Создаём нового пользователя
curl -i -X POST https://jsonplaceholder.typicode.com/users \
 -H "Content-Type: application/json" \
 -d '{
    "name": "Test User",
    "email": "test@example.com"
  }'

# 4. Обновляем пользователя
curl -i -X PUT https://jsonplaceholder.typicode.com/users/1 \
 -H "Content-Type: application/json" \
 -d '{
    "name": "Updated User",
    "email": "updated@example.com"
  }'

HTTP/2 и HTTP/3

Современные версии HTTP добавляют новые возможности:

HTTP/2:

  • Мультиплексирование (несколько запросов в одном соединении)
  • Сжатие заголовков
  • Server Push

HTTP/3:

  • Работает поверх QUIC (не TCP)
  • Ещё быстрее
  • Лучше работает при потере пакетов

Инструменты для работы с HTTP

  1. curl - универсальная утилита командной строки
  2. Postman - GUI для тестирования API
  3. httpie - curl с человеческим лицом
  4. Browser DevTools - Network вкладка

Итоги

HTTP - это основа веб-коммуникаций. Понимание его принципов критически важно для:

  • Разработки API
  • Отладки сетевых проблем
  • Оптимизации производительности
  • Обеспечения безопасности

В следующем уроке мы подробнее рассмотрим работу с JSON - самым популярным форматом данных в HTTP API. Реализация HTTP-сервера на Go - в уроке net/http.

Зарегистрируйтесь бесплатно, чтобы пройти квиз, решить задание с автопроверкой и вести прогресс.