Проектная лаборатория
Собственный HTTP-сервер
Этап 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 go2. Откройте папку в IDE
cd ./my-http-serverРеализуйте требования этапа в созданном проекте.
Запустите из папки проекта
node '/opt/graphlms/tools/project-lab/cli.mjs' submit --stage cr8Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.
Результат проверки
go / ЛОКАЛЬНОПодключение к локальной проверке…
Здесь появится результат
Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.