
Создаём HTTP/2-сервер на C++ и хостим на нём свой сайт
kmoseenk 31 минуту назад Создаём HTTP/2-сервер на C++ и хостим на нём свой сайт Средний 11 мин 1.5K Блог компании OTUS C++ * Системное программирование * Сетевые технологии * Туториал Перевод Автор оригинала: Robert...
GPT-5.6 31 Temmuz 2026'da yayınlanacak mı?
Вот важная новость с фронта ИИ: kmoseenk 31 минуту назад Создаём HTTP/2-сервер на C++ и хостим на нём свой сайт Средний 11 мин 1. 5K Блог компании OTUS C++ * Системное программирование * Сетевые технологии * Туториал Перевод Автор оригинала: Robert Hargreaves Материал подготовлен в рамках курса «Системное программирование»СодержаниеПредысторияПроцесс разработкиУсиление защиты контейнера и исполняемого файлаЗапуск внутри контейнера от непривилегированного пользователяИспользование scratch как базового образаЗащита от непреднамеренного повышения привилегий процесса через PR_SET_NO_NEW_PRIVSASLR и read-only GOT — рандомизация адресного пространства и таблицы глобальных смещений, защищённые от записиУдаление символов из бинарникаАтаки на HTTP/2Варианты облачных провайдеровCloudflarebunny. netGoogle Cloud RunИтогиБонус: утечка памятиМне хотелось лучше разобраться в HTTP/2 и заодно попробовать C++23, поэтому я решил написать HTTP/2-сервер с нуля, используя RFC как основной источник информации.
Пока это оказался очень увлекательный проект, но какой тест может быть лучше, чем бросить его на растерзание интернету и самому же использовать для своего личного сайта? Контента на моём сайте, конечно, не море, но проверка сервера на реальном трафике и размышления о том, что может пойти не так — как по вине обычных пользователей, так и из-за злонамеренных действий, — дали немало интересных выводов о том, как защищать по своей природе небезопасные приложения от атак. Небезопасные — потому что они обрабатывают внешний ввод из интернета.
Технические детали
И ещё потому, что это C++, а значит, с точки зрения памяти всё фундаментально небезопасно. Наверняка у вас уже возник вопрос: почему я не написал это на Rust? Я хотел изучить C++ для разработки аудиоприложений, но, скорее всего, когда-нибудь доберусь и до Rust.
К тому же мне кажется, что опыт с C++ поможет лучше понять Rust. Процесс разработкиЯ разрабатывал Ion, придерживаясь lean-подхода и TDD. Начал с самой базовой функциональности — возвращать :status: 200 на любой HTTP-запрос, — а затем постепенно наращивал возможности.
Сам сервер написан на C++, но системные тесты я делал на Python и проверял сервер стандартными HTTP/2-клиентами: сначала через curl, потом с помощью Python-клиентов для HTTP/2, чтобы тестировать более специфичное поведение, в частности h2hyper и httpx. Для бенчмаркинга и проверки конкурентной обработки запросов я использовал h2load из nghttp2. В итоге у сервера появилась довольно простая, но расширяемая основа для обработки запросов:#include "ion/http2_server.
Отраслевые последствия
h" int main() { ; auto& router = server. add_route("/", "GET", (const ion::HttpRequest&) { const std::string body_text = "hello"; const std::vector body_bytes(body_text. end()); return ; }); server.
start(8443); return 0; }Но такие искусственные тесты могли продвинуть разработку только до определённого предела.
Событие, по словам экспертов, усилит конкуренцию в сфере ИИ.




