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

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

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

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

Сжатие Gzip

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

На этом этапе вы добавите в HTTP-сервер поддержку сжатия gzip.

Тесты

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

$ ./your_program.sh

Затем она отправит запрос GET к эндпоинту /echo/{str} вашего сервера. В запросе будет заголовок Accept-Encoding, включающий gzip.

$ curl -v -H "Accept-Encoding: gzip" http://localhost:4221/echo/abc | hexdump -C

Ответ сервера должен содержать:

  • Код ответа 200.
  • Заголовок Content-Type со значением text/plain.
  • Заголовок Content-Encoding со значением gzip.
  • Заголовок Content-Length с размером сжатого тела.
  • Тело ответа с параметром str, сжатым с помощью gzip.
HTTP/1.1 200 OK
Content-Encoding: gzip
Content-Type: text/plain
Content-Length: 23
 
1F 8B 08 00 00 00 00 00  // This is the hexadecimal representation of the body.
00 03 4B 4C 4A 06 00 C2  // It should actually be sent as binary data.
41 24 35 03 00 00 00

Примечания

  • Проверить правильность сжатого тела можно командой echo -n <uncompressed-str> | gzip | hexdump -C.
  • Увеличение размера при сжатии очень короткой строки, например abc, — нормальное явление.

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

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

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

go / ЛОКАЛЬНО

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

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

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

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