Skip to content

Latest commit

 

History

History
126 lines (83 loc) · 8.81 KB

File metadata and controls

126 lines (83 loc) · 8.81 KB

🚀 Практическое занятие №3

Проверить HTML-ответ


📌 Кратко

📌 Что это 📖 Полное описание
Учебный HTTP-сервер с HTML-ответом В этом задании сервер принимает HTTP-запрос, выводит его структуру, формирует HTML-ответ <strong>Hello</strong> и отправляет его клиенту с правильным заголовком Content-Type, благодаря чему браузер отображает текст как HTML

🎯 Цель

🎯 Что нужно понять 📖 Что это означает на практике
HTML зависит от Content-Type Браузер рендерит HTML только если сервер явно указывает text/html
Теги влияют на отображение Тег <strong> делает текст жирным
Сервер управляет отображением Именно backend решает, как клиент будет интерпретировать ответ

⚙️ Основной код

StringResponse res{http::status::ok, req.version()};
res.set(http::field::server, "Lesson10_10");
res.set(http::field::content_type, "text/html; charset=utf-8");
res.keep_alive(false);
res.body() = "<strong>Hello</strong>\n";
res.prepare_payload();

🧠 Главная идея

🧠 Ключевая логика 📖 Смысл
Content-Type: text/html + HTML в body → браузер рендерит страницу Сервер отправляет HTML и сообщает браузеру, что это HTML, поэтому текст отображается как форматированная страница

🔍 Проверка и результат

🔍 Что выполнить 📥 Какой результат должен быть
Открыть http://localhost:8080/ в браузере и выполнить curl http://localhost:8080/ В браузере слово Hello отображается жирным, а curl показывает исходный HTML <strong>Hello</strong>

🖥 Логи сервера

🖥 Что видно в терминале сервера 📖 Что это доказывает
GET /, Host, User-Agent, Accept и другие заголовки Сервер читает HTTP-запрос и показывает его структуру перед отправкой ответа

🌐 HTTP смысл

🌐 Что происходит 📖 Почему это важно
Клиент получает HTML Браузер может отобразить страницу
Сервер отправляет Content-Type Клиент понимает формат данных
HTML интерпретируется Текст становится форматированным

🚀 Как создать, собрать и запустить

🚀 Что сделать 💻 Команды
Создать урок на базе предыдущего, заменить код, собрать и запустить сервер cd ~/cppbackend/lessons && cp -r web_server_lesson_10_9 web_server_lesson_10_10 && cd web_server_lesson_10_10 && rm -rf build && nano main.cpp && mkdir build && cd build && conan install .. --build=missing && cmake .. && cmake --build . && ./bin/server

🧪 Полная инструкция проверки

📋 Что сделать ✅ Как понять, что всё правильно
Запустить сервер, открыть браузер и выполнить curl несколько раз Браузер показывает жирный Hello, curl возвращает HTML, сервер отвечает каждый раз без зависания

✅ Формулировка проверки

✅ Проверка ✅ Условие выполнено
Сделать запрос через браузер по адресу http://localhost:8080/ Если видно слово Hello жирным, цель достигнута

⚠️ Важно

⚠️ Проблема 📖 Причина и решение
curl зависает соединение не закрывается, нужно keep_alive(false)
текст без форматирования неверный Content-Type
HTML отображается как текст сервер не указал text/html

🏗 Архитектура

🏗 Компоненты 📖 Роль
socket, request, response, http::write Сервер принимает запрос, формирует HTML и отправляет ответ

🏁 Итог

🏁 Что доказано 📌 Вывод
HTML-ответ корректно отображается в браузере Сервер управляет тем, как клиент видит данные

💡 Вывод

💡 Главное
HTML + правильный Content-Type превращают обычный ответ сервера в страницу, которую браузер умеет отображать