Анатомия запроса
Урок 20 из 47 курса Сетевое взаимодействие в терминале на Coddy.
Под капотом curl HTTP-запрос представляет собой обычный текст, отправленный через сокет. Он начинается с одной строки, в которой указывается, что именно вы хотите:
GET /index.html HTTP/1.1Три части: метод (какого рода операция), путь (какой объект) и версия. После этого идут заголовки, по одному в строке, затем пустая строка, а после неё — необязательное тело.
Пустая строка — не просто оформление. Именно по ней сервер понимает, что заголовки закончились и начинается тело, если оно есть. Запрос без неё зависает, потому что сервер всё ещё ждёт продолжения.
Вы можете отправить запрос вручную. nc открывает необработанное соединение, и всё, что вы ему передадите, отправляется напрямую по сети:
printf 'GET / HTTP/1.0\r\n\r\n' | nc 127.0.0.1 9110\r\n — это конец строки, который требуется HTTP, а два таких окончания подряд образуют пустую строку.
Задание
СложноПолностью пропусти curl и обратись к HTTP напрямую.
- Создай
index.html, содержащийraw - Запусти сервер для этой папки на порту 9110
- Отправь необработанный запрос
GET /index.html HTTP/1.0черезncи выведи только первую строку полученного ответа
Эта первая строка — строка состояния сервера. Ожидаемый вывод:
HTTP/1.0 200 OKНе забудь пустую строку:
printf 'GET /index.html HTTP/1.0\r\n\r\n'.
Попробуйте сами
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Сетевое взаимодействие в терминале
5HTTP вручную
Анатомия запросаМетоды запросовКоды состоянияЗаголовки ответаФормирование ответаПовторение: основы HTTP3Порты и сокеты
Что такое портХорошо известные портыЛокальный хостПрослушивание и подключениеПовторение: порты6curl в деталях
Просмотр заголовковСохранение ответовПользовательские заголовкиСтатус и время выполненияКоды выхода curlПовторение: флаги curl9Аутентификация и отладка
API-ключи и BearerUser-AgentТайм-ауты и повторные попыткиАнализ ошибкиПовторение: отладкаПотренируйтесь самостоятельно: Песочница Terminal