Из чего состоит HTTP запрос
Что проверяют
Знаете ли вы структуру и понимаете ли назначение обязательных частей.
Как отвечать
Запрос состоит из четырёх частей, идущих по порядку:
- стартовая строка: метод, путь с параметрами запроса и версия протокола;
- заголовки: пары «имя: значение», по одной на строку;
- пустая строка, отделяющая заголовки от тела;
- тело, необязательное.
POST /api/jobs?draft=true HTTP/1.1
Host: www.workaem.com
Content-Type: application/json
Content-Length: 42
Authorization: Bearer eyJhbGci...
{"title":"Frontend Developer","salary":250000}Что стоит пояснить по частям:
- метод задаёт намерение и свойства запроса: безопасность и идемпотентность;
- путь и параметры запроса: путь адресует ресурс, параметры уточняют выборку. Секреты в параметрах не передают, они попадают в логи и в историю браузера;
Hostобязателен в версии 1.1, потому что на одном адресе живёт много сайтов;Content-Typeописывает формат тела, аContent-Lengthего длину. Ошибка в первом это самая частая причина, когда сервер отвечает 415 или не разбирает тело;- тело есть у
POST,PUTиPATCH, уGETего быть не должно.
Ответ устроен симметрично: статусная строка с версией, кодом и фразой, затем заголовки, пустая строка и тело.
Полезное дополнение про версии: в HTTP/2 и HTTP/3 та же логическая структура сохраняется, но передаётся в двоичном виде, заголовки сжимаются, а метод и путь становятся псевдозаголовками. Поэтому в инструментах разработчика вы по-прежнему видите привычную картину, хотя по сети идут кадры.
Где спотыкаются
Забывают про пустую строку между заголовками и телом.
Путают параметры запроса и тело.
Не понимают, зачем нужен Host.
Отправляют JSON без Content-Type и удивляются, что сервер не разобрал его.