Как интерпретировать несколько заголовков Accept-*
Мое чтение RFC 2616 не ответило на мой вопрос:
Как сервер должен интерпретировать несколько заголовков Accept, Accept-Encoding, Accept-Language и т. Д.?
Конечно, это, как правило, должно быть редким явлением, но я не могу предположить, что каждый HTTP-клиент действительно делает то, что должен.
Представьте, что HTTP-запрос включает в себя следующее:
Accept-Language: en
Accept-Language: pt
Если сервер:
- Объединить результаты, чтобы эффективный
Accept-Language: en, pt
? - Почитай только первый (
en
)? - Почитай только последний (
pt
)? - Бросить шипение (вернуть статус 400, возможно?)
Вариант № 1 кажется мне наиболее естественным, и, скорее всего, это то, что имеет в виду клиент, и наименее вероятно, что он полностью превзойдет ожидания, даже если это не то, что имеет в виду клиент.
Но существует ли какое-либо действительное правило (в идеале определенное в RFC) для того, как справляться с этими ситуациями?
1 ответ
1) Вы смотрите на устаревший RFC. RFC 2616 был отменен два года назад.
2) Тем не менее, ответ 1); см. https://greenbytes.de/tech/webdav/rfc7230.html: "Получатель МОЖЕТ объединить несколько полей заголовка с одним и тем же именем поля в одно"field-name: field-value"пара, не изменяя семантику сообщения, добавляя каждое последующее значение поля к объединенному значению поля по порядку, разделенному запятой. (...)"