Проектная лаборатория
Собственный HTTP-сервер
Этап 04 · Основные этапы
Ответ с телом
Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.
На этом этапе вы реализуете эндпоинт /echo/{str}, который принимает строку и возвращает её в теле ответа.
Тело ответа
Тело ответа служит для передачи содержимого клиенту. Это может быть целая веб-страница, файл, строка или любые другие данные, представимые в байтах.
Эндпоинт /echo/{str} должен возвращать ответ 200 с заданной строкой в теле, а также заголовками Content-Type и Content-Length.
Пример запроса к /echo/{str}:
GET /echo/abc HTTP/1.1\r\nHost: localhost:4221\r\nUser-Agent: curl/7.64.1\r\nAccept: */*\r\n\r\nОжидаемый ответ:
HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\nContent-Length: 3\r\n\r\nabcРазберём ответ по частям:
// Status line
HTTP/1.1 200 OK
\r\n // CRLF that marks the end of the status line
// Headers
Content-Type: text/plain\r\n // Header that specifies the format of the response body
Content-Length: 3\r\n // Header that specifies the size of the response body, in bytes
\r\n // CRLF that marks the end of the headers
// Response body
abc // The string from the requestОба заголовка необходимы, чтобы клиент мог разобрать тело ответа. Обратите внимание: каждый заголовок заканчивается CRLF, и весь раздел заголовков также заканчивается CRLF.
Тесты
Тестирующая система запустит вашу программу следующим образом:
$ ./your_program.shЗатем она отправит запрос GET к эндпоинту /echo/{str} вашего сервера с некоторой случайной строкой.
$ curl -v http://localhost:4221/echo/abcСервер должен вернуть ответ 200, содержащий:
- Заголовок
Content-Typeсо значениемtext/plain. - Заголовок
Content-Lengthс длиной заданной строки. - Тело ответа с заданной строкой.
HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\nContent-Length: 3\r\n\r\nabcПримечания
- Дополнительные сведения об HTTP-ответах приведены в MDN Web Docs и спецификации HTTP/1.1.
Проверка в вашей IDE
Нужны Node.js, Git, Go 1.24+ для тестеров и инструменты выбранного языка. Тестеры загружаются и запускаются локально; отдельным проектам нужны дополнительные системные зависимости.
Настройка проекта и IDE
1. Создайте проект один раз
node '/opt/graphlms/tools/project-lab/cli.mjs' init http-server ./my-http-server --language go2. Откройте папку в IDE
cd ./my-http-serverРеализуйте требования этапа в созданном проекте.
Запустите из папки проекта
node '/opt/graphlms/tools/project-lab/cli.mjs' submit --stage cn2Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.
Результат проверки
go / ЛОКАЛЬНОПодключение к локальной проверке…
Здесь появится результат
Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.