Создание простого HTTP‑сервера на raw‑сокетах для отдачи статической страницы

Нужен обычный TCP-сокет SOCK_STREAM, не привилегированный SOCK_RAW. Сервер принимает соединение, читает HTTP-заголовки до CRLF CRLF, проверяет GET / и отправляет ответ с длиной тела в байтах.

Короткий ответ

Что ответить на собеседовании

Нужен обычный TCP-сокет SOCK_STREAM, не привилегированный SOCK_RAW. Сервер принимает соединение, читает HTTP-заголовки до CRLF CRLF, проверяет GET / и отправляет ответ с длиной тела в байтах.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо построить веб‑сервер, работающий напрямую через необработанные (raw) сокеты. После установления TCP‑соединения с клиентом сервер должен корректно обработать запрос к корневому пути ("/") и отдать заранее подготовленный статический HTML‑файл. В описании следует изложить шаги настройки серверного сокета, процесс принятия соединений, разбор HTTP‑запроса, формирование HTTP‑ответа с заголовками и телом, а также закрытие соединения после отправки данных.

Ответ

Нужен обычный TCP-сокет SOCK_STREAM, не привилегированный SOCK_RAW. Сервер принимает соединение, читает HTTP-заголовки до CRLF CRLF, проверяет GET / и отправляет ответ с длиной тела в байтах.

Последовательность: socket → bind на 127.0.0.1:8080 → listen → accept. На клиентском соединении задайте timeout и предел размера заголовков; один recv не гарантирует получение полного запроса. Разберите стартовую строку, для неподдерживаемого метода верните 405, для другого пути — 404.

Ответ для UTF-8 файла body, прочитанного как bytes:

headers = (
    'HTTP/1.1 200 OK\r\n'
    'Content-Type: text/html; charset=utf-8\r\n'
    f'Content-Length: {len(body)}\r\n'
    'Connection: close\r\n\r\n'
).encode('ascii')
connection.sendall(headers + body)

Закройте соединение через with/finally. Не превращайте URL в произвольный файловый путь. Такой учебный сервер не заменяет production HTTP-сервер с полноценным парсером, TLS и защитой от медленных клиентов.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее