Что такое HTTP запрос? Какова его структура?

🎯 Зачем спрашивают
  • Проверка понимания базовых сетевых принципов (насколько кандидат ориентируется в протоколах).
  • Умение объяснить простыми словами, что такое HTTP и из чего состоит запрос.
 
📝 Ответ
HTTP (Hypertext Transfer Protocol) — это гипертекстовый протокол передачи данных прикладного уровня в сетевой модели OSI. Создан для связи между браузерами и серверами, хотя в принципе HTTP может использоваться и для других целей. HTTP традиционно работает поверх TCP, но может использоваться любой другой протокол транспортного уровня с гарантированной доставкой.
 
Сетевая модель OSI — это модель взаимодействия открытых систем, предложенная ISO (International Organization for Standardization) в 1984 году. Её цель — стандартизировать принципы построения и работы сетей, чтобы разные устройства и программы могли взаимодействовать независимо от их производителя.
Сетевая модель OSI — это модель взаимодействия открытых систем, предложенная ISO (International Organization for Standardization) в 1984 году. Её цель — стандартизировать принципы построения и работы сетей, чтобы разные устройства и программы могли взаимодействовать независимо от их производителя.
 

Структура

#1 Стартовая строка (Request Line)
Формат:
<Метод> <Путь> <Версия протокола>
Примеры:
GET /index.html HTTP/1.1 POST /api/login HTTP/1.1
  • Путь — URI ресурса (например /products/123).
  • Версия — чаще всего HTTP/1.1 или HTTP/2.
 
⚠️
Стартовая строка характерна для HTTP/1.x. В HTTP/2 и HTTP/3 используется другая структура — псевдозаголовки).
 
#2 Заголовки (Headers)
Мета-информация, вкладываемая в запрос. Это пары «ключ: значение», которые уточняют запрос.
Пример:
Host: www.example.com User-Agent: Mozilla/5.0 Accept: text/html,application/xhtml+xml Content-Type: application/json X-Say-My-Name: Heisenberg
Некоторые важные:
  • Host — указывает домен (обязателен в HTTP/1.1).
  • User-Agent — информация о клиенте (браузере).
  • Accept — какие форматы ответа клиент может обработать.
  • Content-Type — формат тела запроса (если есть).
  • X-Say-My-Name — кастомный заголовок. Используйте как душе угодно
 
#3 Тело (Body)
Используется не всегда. Обычно в POST, PUT, PATCH.
Примеры:
  • В GET тело чаще всего отсутствует.
  • В POST с формой (Content-Type: application/x-www-form-urlencoded):
    • username=alex&password=123
  • В POST с JSON (Content-Type: application/json):
    • { "username": "alex", "password": "123" }
 
Пример HTTP запроса:
notion image
 
Пример ответа:
notion image
 
⚖️ Компромиссы
✅ Плюсы
❌ Минусы
Простота и широкая поддержка — работает во всех браузерах и серверах без доп. настроек
Отсутствие шифрования — данные передаются в открытом виде
Низкие накладные расходы — нет затрат на шифрование/дешифрование
Уязвимость для атак (перехват, MITM, подмена содержимого)
Минимальные требования к инфраструктуре — не нужны TLS-сертификаты
Нет защиты конфиденциальности (логины, пароли, куки видны в сети)
Хорошо работает с кэшами и прокси
Нет гарантии целостности данных (их можно изменить по пути)
Стейтлес-природа — легко масштабировать
Современные браузеры и API часто блокируют HTTP (требуют HTTPS)
Меньше задержка в простых сценариях
Не подходит для передачи чувствительных данных
 
🔎 Встречные вопросы
  • Что такое URI?
  • Чем отличаются URI, URL и URN?
  • Какие обязательные заголовки в HTTP/1.1?
  • Какие версии протокола знаете?
 
🚩 Красные флаги
  • HTTP — это протокол только для браузеров (игнорирование того, что он шире: API, сервисы).
  • У GET-запроса никогда не бывает тела (категоричность, без уточнения, что стандарт не запрещает, но обычно не используется).
  • Путает структуру: не упоминает стартовую строку или говорит, что заголовки «необязательны».
  • Уверяет, что HTTP всегда = TCP и не знает про HTTP/3/QUIC.
  • Не различает уровни модели (путает HTTP с TCP/IP или даже с DNS).
 
🛠 Практика
Поделать HTTP-запросы через curl / httpie / fetch
Есть API — http://httpbin.org Выполните:
• GET-запрос, посмотреть заголовки ответа
• POST-запрос с данными формы / JSON
• Запрос с кастомными заголовками (например, X-My-Header)
• Отправить запрос с аутентификацией (Basic Auth)
• Отправить запрос с параметрами query string
 
📚 Источники / ссылки
  • MDN Web DocsMDN Web DocsHTTP | MDN
  • Книга «Компьютерные сети. Принципы, технологии, протоколы» (с) Viktor Olifer