Подтвердить что ты не робот

Что такое разделитель для WWW-аутентификации для нескольких схем?

Я прочитал RFC 2617 и не могу найти там или где-либо еще, что такое разделитель, если поддерживаются несколько схем. Например, предположим, что базовые и дайджесты поддерживаются. Я понимаю, что это может выглядеть так:

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic
WWW-Authenticate: Digest

Но я также читал, что оба они могут быть перечислены как одна строка, но никто никогда не показывает пример или не описывает, какой разделитель использовать. Я видел предостережения о том, что запятые могут использоваться в рамках одной схемы:

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Digest param1="foo", param2="bar"

Я также читал, что если запятые используются в схеме, другие схемы должны быть размещены на отдельных строках. Поэтому я предполагаю, что в приведенном выше случае, если бы мы добавили Basic, это выглядело бы так:

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Digest param1="foo", param2="bar"
WWW-Authenticate: Basic

Это достаточно просто. Но теперь предположим, что у вас есть только одна строка

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Scheme stuff, morestuff, more stuff

Что это? Является ли это списком схем с разделителями-запятыми или это одна схема с несколькими параметрами?

4b9b3361

Ответ 1

Насколько я могу судить, спецификация отражает проблему. Раздел 1.2 гласит:

Примечание. Пользовательские агенты должны проявлять особую осторожность при разборе WWW-
Authenticate или Proxy-Authenticate значение поля заголовка, если оно содержит более чем одна проблема
, или если несколько заголовков WWW-Authenticate
поле предоставляется, поскольку содержимое проблемы может само по себе содержат список параметров аутентификации, разделенных запятыми.

Я думаю, что мы можем перевести особую заботу на лучшее счастье.

Прагматизм
Как практический вопрос, я подозреваю, что несколько схем означают, что нужно использовать несколько заголовков wwww-authenticate. Схемы расширяемы; например, я могу придумать схему, называемую "клубника" или "непрозрачная", если я хочу быть зловещей. Учитывая это, на самом деле нет хорошего способа разобрать один лайнер без какого-либо разделителя ограничений схемы.

Обсуждение W3C
Вы не первый человек с этим вопросом. Там было обсуждение в списке рассылки W3C. Плакат заявил:

Я не ставил под сомнение необходимость предоставления множества проблем в один ответ. Я только ставил под сомнение мудрость в разрешении множественные задачи в одном поле заголовка, учитывая нечетные сочетание создаваемых сепараторов.

Некоторые другие темы обсуждают текущие проблемы и будущие действия, которые могут представлять интерес:

Если только...
Не то, чтобы у меня был желудок, но можно было прорыть код хромима, firefox и webkit, чтобы увидеть, как эти сообщества справились с этой проблемой.