Введение

Обслуживание нескольких документов по одному URI

Контентное согласование относится к механизмам, определенным в рамках HTTP, которые позволяют предоставлять различные версии документа (или, в более общем смысле, представления ресурса) по одному и тому же URI, чтобы пользовательские агенты могли указать, какая версия наилучшим образом соответствует их возможностям. Классическим примером использования этого механизма является предоставление изображения в формате GIF или PNG, так что браузер, не способный отображать изображения PNG (например, MS Internet Explorer 4), получит версию в формате GIF. Ресурс может быть доступен в нескольких различных представлениях, например, на разных языках или в разных типах медиа. Один из способов выбора наиболее подходящего представления – предоставить пользователю индексную страницу и позволить ему сделать выбор самостоятельно; однако часто можно автоматизировать этот выбор на основе определенных критериев.

Механизмы

HTTP предусматривает несколько различных механизмов согласования контента, включая: управляемые сервером (или проактивные), управляемые клиентом (или реактивные), прозрачные и/или гибридные комбинации этих механизмов.

Управляемая агентом

Алгоритмы в пользовательском агенте выполняют согласование контента, основанное на действиях агента или в реактивном режиме, выбирая из возможных вариантов представления. Обычно это делается на основе списка представлений и метаданных, предоставленных сервером. Если обобщить принцип работы, то когда пользовательский агент отправляет запрос на сервер, сервер сообщает агенту о доступных представлениях и любых метаданных, связанных с каждым из них (например, тип контента, качество, язык и т. д.). Затем пользовательский агент повторно отправляет запрос по конкретному URL для выбранного представления. Выбор может быть сделан автоматически пользовательским агентом, либо агент может предоставить пользователю варианты на выбор, чтобы он мог выбрать представление напрямую. Более точно, сервер отвечает кодом 300 Multiple Choices или 406 Not Acceptable (в случае, когда управление осуществляется сервером, предоставляются критерии приемлемости для пользовательского агента, но сервер не может выполнить выбор автоматически). К сожалению, HTTP не определяет формат списка представлений и метаданных, а также механизмы выбора.