Кратко

  • RFC 1176 сделал команды FIND MAILBOXES и FIND BBOARDS необязательными. Ответ BAD не позволял клиенту установить, почему запрос не выполнен.
  • RFC 1203 объявил себя альтернативой RFC 1176 и предложил запрашивать поддерживаемые версии и функции до выбора поведения сервера.

Нажать «найти почтовые ящики» было проще, чем узнать, существует ли такая команда на подключённом сервере. RFC 1176, опубликованный в августе 1990 года, разрешал серверу не поддерживать FIND MAILBOXES. Если попытка заканчивалась ответом BAD, документ прямо запрещал клиенту делать вывод о причине. Для FIND BBOARDS действовало то же правило. Знание находилось у сервера; программа пользователя должна была выяснять его через неудачу.

В феврале 1991 года John Rice выпустил RFC 1203 с проектом IMAP3. Он назвал текст встречным предложением к RFC 1176 и заявил, что прежнюю редакцию подготовили без внутреннего обсуждения в сообществе IMAP. Это оценка процесса самим Rice. Техническую причину спора можно проверить по опубликованным правилам: необязательная функция без запроса списка функций превращает интерфейс в угадайку.

IMAP3 строил обмен иначе. SUPPORTED.VERSIONS возвращал список версий протокола и возможностей сервера. SELECT.VERSION выбирал версию, SELECT.FEATURES включал или выключал именованные функции. В образце обмена сначала запрашивается список, затем выбирается версия 3.0 и включается TAGGED.SOLICITED. На выбор отсутствующей версии или функции сервер должен ответить NO. После этого разработчик может показать действие пользователю на основании полученного ответа.

Старый клиент сохранял вход без новых переговоров. По умолчанию соединение следовало IMAP2 в редакции RFC 1064; иное поведение требовало явного выбора. Версию предписывалось выбрать до почтового ящика: сервер мог запускать для другой версии другую программу, а состояние при переключении не сохранялось. Дешевле выяснить условия работы до того, как в сессии появятся данные ящика.

Разногласие касалось и внутреннего устройства клиента. Приложение к RFC 1176 требовало локальный кэш, неполную модель содержимого ящика, которую дополняют ответы сервера. RFC 1203 возражал против предположений о конкретной архитектуре этого кэша. Он разделял обязательные ответы на команду, помеченные её идентификатором, и самостоятельные сообщения сервера со знаком *. Когда несколько поисков выполняются одновременно, а носитель отвечает с задержкой, результат нужно привязать к правильному запросу.

Официальная карточка сегодня отмечает RFC 1203 как Historic; для Интернета предложение было Experimental. Числа установок она не сообщает. Исторический спор остаётся вполне ощутимым: одно описание стандарта позволяло серверу молчать о своих опциях, другое требовало предъявить их до работы. Цена слова «необязательно» оказалась счётом для автора каждого клиента.

Источники