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