Веб-сервер TCP/IP
В этой лекции ты узнаешь, как написать свой HTTP-веб-сервер, используя пакет net в стандартной библиотеке Golang.
Рекомендуем изучить материал о модели OSI, чтобы следующие разделы темы были тебе понятны. Также рекомендуем посмотреть материалы о работе HTTP-протокола, чтобы выяснить, что такое HTTP-пакет, запрос и ответ.
В этой лекции мы предлагаем тебе на практике изучить работу HTTP-сервера. Используй алгоритм, описанный ниже, а результаты практики расположи по следующему пути:
/module4/webserver/tcp/main.go.
- Для начала напишем TCP-сервер, слушающий порт 8080 и печатающий принимаемые данные в консоль:
Как мы можем видеть, реализация веб-сервера на TCP — это один цикл, запускающий каждый запрос в своей горутине.
Пришло время поработать с кодом! |
- Запусти данный код и пройди по ссылке http://localhost:8080.
В браузере будет ошибка:
В консоли приложения мы увидим следующий вывод:
Это вывод входящего get-запроса или HTTP request packet:
Чтобы обрабатывать пакеты HTTP с использованием TCP в Go, ты можешь использовать пакет net для создания слушателя на определенном порту, можешь обрабатывать входящие соединения с помощью метода Accept, а затем использовать методы Read и Write для чтения и записи данных в соединении. После прочтения данных ты можешь разобрать их как запрос HTTP и выполнить соответствующие действия. Пример можно найти по ссылке.
Вывод в браузере:
- Итак, мы научились делать простой веб-сервер на TCP, используя стандартный пакет net. Давай немного усложним наш вариант и составим свой собственный HTTP packet.
Пришло время поработать с кодом! |
Мы добавили основные заголовки в наш HTTP packet, а также HTML-страницу в качестве контента. Главным полем HTTP header здесь является Content-Length: 98, который указывает на то, что размер нашего контента составит 98 байт, браузер будет ожидать все 98 байт и после их передачи соединение будет сброшено.
- Теперь добавим возможность загружать файл.
Чтобы добавить возможность загрузки файла в веб-сервере HTTP с использованием TCP в Go, ты можешь изменить функцию handleConnection. Пример того, как это можно сделать, ты найдешь по ссылке.
-
Воспользуйся Postman, чтобы загрузить текстовый файл.
-
Исправь код, замени блок else if на switch.
Рекомендуем ознакомиться с дополнительными материалами по теме: