Skip to content

Веб-сервер TCP/IP

В этой лекции ты узнаешь, как написать свой HTTP-веб-сервер, используя пакет net в стандартной библиотеке Golang.

Рекомендуем изучить материал о модели OSI, чтобы следующие разделы темы были тебе понятны. Также рекомендуем посмотреть материалы о работе HTTP-протокола, чтобы выяснить, что такое HTTP-пакет, запрос и ответ.

В этой лекции мы предлагаем тебе на практике изучить работу HTTP-сервера. Используй алгоритм, описанный ниже, а результаты практики расположи по следующему пути:

/module4/webserver/tcp/main.go.

  1. Для начала напишем TCP-сервер, слушающий порт 8080 и печатающий принимаемые данные в консоль:

Как мы можем видеть, реализация веб-сервера на TCP  это один цикл, запускающий каждый запрос в своей горутине.

Пришло время поработать с кодом!

  1. Запусти данный код и пройди по ссылке http://localhost:8080.

В браузере будет ошибка:

Изображение выглядит как текст  Автоматически созданное описание

В консоли приложения мы увидим следующий вывод:

Изображение выглядит как текст  Автоматически созданное описание

Это вывод входящего get-запроса или HTTP request packet:

Изображение выглядит как текст  Автоматически созданное описание

Чтобы обрабатывать пакеты HTTP с использованием TCP в Go, ты можешь использовать пакет net для создания слушателя на определенном порту, можешь обрабатывать входящие соединения с помощью метода Accept, а затем использовать методы Read и Write для чтения и записи данных в соединении. После прочтения данных ты можешь разобрать их как запрос HTTP и выполнить соответствующие действия. Пример можно найти по ссылке.

Вывод в браузере:

Изображение выглядит как текст  Автоматически созданное описание

  1. Итак, мы научились делать простой веб-сервер на TCP, используя стандартный пакет net. Давай немного усложним наш вариант и составим свой собственный HTTP packet.

Пришло время поработать с кодом!

Мы добавили основные заголовки в наш HTTP packet, а также HTML-страницу в качестве контента. Главным полем HTTP header здесь является Content-Length: 98, который указывает на то, что размер нашего контента составит 98 байт, браузер будет ожидать все 98 байт и после их передачи соединение будет сброшено.

  1. Теперь добавим возможность загружать файл.

Чтобы добавить возможность загрузки файла в веб-сервере HTTP с использованием TCP в Go, ты можешь изменить функцию handleConnection. Пример того, как это можно сделать, ты найдешь по ссылке.

  1. Воспользуйся Postman, чтобы загрузить текстовый файл.

  2. Исправь код, замени блок else if на switch.

Рекомендуем ознакомиться с дополнительными материалами по теме: