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

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

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

Этап 10 · Сжатие HTTP

Несколько методов сжатия

Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.

На этом этапе вы добавите поддержку заголовков Accept-Encoding, содержащих несколько методов сжатия.

Несколько методов сжатия

Клиент может сообщить о поддержке нескольких методов сжатия, указав их в Accept-Encoding через запятую:

Accept-Encoding: encoding-1, encoding-2, encoding-3

В этом расширении считайте, что сервер поддерживает только метод сжатия gzip.

На этом этапе сжимать тело не требуется. Вы реализуете сжатие на следующем этапе.

Тесты

Тестирующая система запустит вашу программу следующим образом:

$ ./your_program.sh

Затем она отправит два запроса GET к эндпоинту /echo/{str} вашего сервера.

Первый запрос

В первом запросе заголовок Accept-Encoding будет содержать gzip вместе с несколькими неподдерживаемыми кодированиями:

$ curl -v -H "Accept-Encoding: invalid-encoding-1, gzip, invalid-encoding-2" http://localhost:4221/echo/abc

Ответ сервера должен содержать заголовок Content-Encoding: gzip.

HTTP/1.1 200 OK
Content-Type: text/plain
Content-Encoding: gzip
 
// Body omitted.

Второй запрос

Во втором запросе заголовок Accept-Encoding будет содержать только неподдерживаемые кодирования:

$ curl -v -H "Accept-Encoding: invalid-encoding-1, invalid-encoding-2" http://localhost:4221/echo/abc

Ответ сервера не должен содержать заголовок Content-Encoding:

HTTP/1.1 200 OK
Content-Type: text/plain
 
// Body omitted.

Проверка в вашей 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 ij8

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

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

go / ЛОКАЛЬНО

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

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

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

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