Код Middle HTTP-сервер, Express, NestJS обновлено

Content negotiation по заголовку Accept

Условие

Напиши negotiate(accept, supported): выбери из supported (массив MIME-типов сервера в порядке предпочтения сервера) лучший для клиента по заголовку Accept.

  • Элементы заголовка через запятую, у каждого может быть ;q=0.8 (по умолчанию q=1). q=0 значит «не принимаю».
  • Поддерживаются маски type/* и */*. Для типа сервера берётся q самого конкретного совпавшего элемента (точный тип важнее type/*, тот важнее */*).
  • Побеждает максимальный q, при равенстве порядок supported.
  • Пустой или отсутствующий заголовок значит */*. Если подходящих нет, верни null (сервер ответит 406).

Примеры

negotiate("application/json", ["application/json", "text/html"]) // "application/json"
negotiate("text/html;q=0.9, application/json;q=0.8", ["application/json", "text/html"]) // "text/html"
negotiate("*/*", ["application/json", "text/csv"]) // "application/json"

Как подойти

Подсказки: 2
  1. Разбери заголовок в список { range, q }.
  2. Для каждого типа сервера найди самое конкретное совпадение и возьми его q.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.