Проектная лаборатория

Собственный HTTP-сервер

0 / 14этапов пройдено

Этап 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

Примечания

Проверка в вашей IDE

Нужны Node.js, Git, Go 1.24+ для тестеров и инструменты выбранного языка. Тестеры загружаются и запускаются локально; отдельным проектам нужны дополнительные системные зависимости.

Настройка проекта и IDE

1. Создайте проект один раз

node '/opt/graphlms/tools/project-lab/cli.mjs' init http-server ./my-http-server --language go

2. Откройте папку в IDE

cd ./my-http-server

Реализуйте требования этапа в созданном проекте.

Запустите из папки проекта

node '/opt/graphlms/tools/project-lab/cli.mjs' submit --stage cn2

Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.

Результат проверки

go / ЛОКАЛЬНО

Подключение к локальной проверке…

Здесь появится результат

Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.

GraphLMS — инженерная лаборатория роста