Код 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
- Разбери заголовок в список
{ range, q }. - Для каждого типа сервера найди самое конкретное совпадение и возьми его q.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.