🚀 Практическое занятие №5
Разные ответы в зависимости от пути
📌 Что это
📖 Полное описание
Учебный HTTP-сервер с маршрутизацией
В этом задании сервер анализирует путь запроса и возвращает разные ответы в зависимости от target, включая разные HTML-страницы и ошибку 404
🎯 Что нужно понять
📖 Что это означает на практике
Анализ request target
Сервер определяет, какой путь запросил клиент
Выбор ответа
Для каждого пути формируется свой ответ
Управление статусом
Сервер может вернуть 200 или 404
Выбор Content-Type
HTML и текст возвращаются с разными типами
if (req.target() == " /" ) {
res.set (http::field::content_type, " text/html; charset=utf-8" );
res.body () = " <h1>Main page</h1>\n " ;
} else if (req.target() == " /hello" ) {
res.set (http::field::content_type, " text/html; charset=utf-8" );
res.body () = " <strong>Hello</strong>\n " ;
} else {
res.result (http::status::not_found);
res.set (http::field::content_type, " text/plain; charset=utf-8" );
res.body () = " 404 Not Found\n " ;
}
🧠 Ключевая логика
📖 Смысл
req.target() → выбор ответа → формирование response
Сервер анализирует путь запроса и возвращает разный результат
🔍 Что выполнить
📥 Какой результат должен быть
Выполнить curl для /, /hello и неизвестного пути
Сервер возвращает разные HTML-ответы и корректный 404
🌐 Сценарий
📖 Результат
GET /
HTML Main page
GET /hello
HTML Hello
GET /unknown
404 Not Found
🚀 Действие
💻 Команды
Создать урок, собрать и запустить
cd ~/cppbackend/lessons && cp -r web_server_lesson_10_11 web_server_lesson_10_12 && cd web_server_lesson_10_12 && rm -rf build && nano main.cpp && mkdir build && cd build && conan install .. --build=missing && cmake .. && cmake --build . && ./bin/server
📋 Что сделать
✅ Результат
Проверить разные URL через curl
Ответы отличаются
Проверить неизвестный путь
Возвращается 404
Проверить curl -i
Виден статус 404
✅ Проверка
✅ Условие выполнено
Сделать запросы к разным путям
Сервер возвращает разные ответы
⚠️ Ошибка
📖 Причина
всегда один ответ
нет проверки target
нет 404
не установлен status
HTML не работает
неверный Content-Type
🏁 Что доказано
📌 Вывод
Сервер умеет различать пути и возвращать разные ответы
Это основа маршрутизации backend сервера
💡 Главное
request.target() управляет логикой ответа сервера