Три вопроса здесь:
Во-первых, примечание из RFC 2616 предназначено для рассмотрения схем URI, в которых ответы различных типов доступны для различных URI, таких как "/path/to/thing.xml" vs "/path/to/thing.json ». Это не всегда популярный выбор, но если вы можете сделать это, сделайте это и включите гиперссылки на каждую в «сущности»; то есть в теле ответа. Поскольку RFC не предписывает Content-Type или модель обработки для таких ссылок, вы самостоятельно решаете, как их вернуть, но HTML с тегами <a>
является распространенным и полезным.
Если вы не хотите выставлять несколько типов в разных URI, а просто хотите выставить один тип в исходном URI, тогда вполне нормально ответить 406 и сущностью, которая просто говорит, какие типы может выдавать ресурс.
Во-вторых, обратите внимание, что большинство веб-браузеров отправляют */*
в заголовке Accept (с низким значением качества), который должен соответствовать любому типу контента. Кроме того, в спецификации говорится: «... если поле заголовка Accept отсутствует, то предполагается, что клиент принимает все типы мультимедиа». Так что случаи, когда вы должны повышать 406, редки.
В-третьих, не отправляйте заголовок ответа Content-Type, который отличается от Content-Type объекта ответа. Он должен не использоваться для перечисления допустимых типов. Вы также должны не выдавать заголовок ответа с именем «Принять»; заголовок «Принять» предназначен только для запросов; см http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.1