Установить более одного HTTP-заголовка с тем же именем?
Насколько я знаю, спецификацией HTTP разрешено устанавливать более одного HTTP-заголовка с тем же именем. Есть ли какой-либо прецедент для этого (от клиента к серверу и наоборот)?
HTTP 1.1 Раздел 4.2:
Несколько полей заголовка сообщения с одно и то же имя поля МОЖЕТ присутствовать в сообщение тогда и только тогда, когда весь значение поля для этого поля заголовка определяется как список, разделенный запятыми [то есть, # (значения)]. Он ДОЛЖЕН быть возможным объединить несколько полей заголовка в одно "имя-поля: значение поля" пара, не меняя семантики сообщения, добавляя каждый последующее значение поля для первого, каждая из которых разделена запятой. Приказ в которых поля заголовка с одинаковыми поэтому полевое имя получено существенный для интерпретации комбинированное значение поля и, следовательно, proxy НЕ ДОЛЖЕН изменять порядок эти значения полей, когда сообщение пересылаются.
Если я не ошибаюсь, нет случая, когда нужны несколько заголовков с тем же именем.
Ответы
Ответ 1
Поскольку дублирующие заголовки могут вызывать проблемы с различными веб-серверами и API (независимо от того, что говорит спецификация), я сомневаюсь, что существует универсальный вариант использования, где это лучше всего. Это не означает, что кто-то где-то не делает этого, конечно.
Ответ 2
Он обычно используется для Set-Cookie:
. На многих серверах установлено несколько файлов cookie.
Конечно, вы всегда можете установить их все в одном заголовке.
На самом деле, я думаю, вы не можете установить несколько файлов cookie в одном заголовке. Так что необходимый прецедент.
Спецификация Cookie утверждает, что вы можете комбинировать несколько файлов cookie в одном заголовке так же, как и другие заголовки, которые могут быть объединены (разделены запятыми), но также указывает что несоответствующие синтаксисы (например, параметр Expires
, который имеет ,
в своем значении) все еще распространены и должны решаться с помощью реализаций.
Итак, если вы используете параметры Expires
в своих заголовках Set-Cookie
, и вы не хотите, чтобы все ваши файлы cookie истекали одновременно, вам, вероятно, нужно использовать несколько заголовков.
Ответ 3
Это разрешено только для заголовков, использующих очень специфический формат, см. RFC 2616, раздел 4.2.
Ответ 4
Поскольку вы ищете варианты использования, возможно, Accept
будет действительным.
- Принять: application/json
- Принять: application/xml
Ответ 5
Старый поток, но я изучал эту же проблему. В любом случае заголовки Accept и Accept-Encoding являются типичными примерами, которые используют несколько значений, разделенных запятой. Даже если это специальный заголовок запроса, спецификации не различают запрос и ответ на этом уровне. Проверьте это на этой странице.
Что спецификация говорит, что если у вас есть запятая в качестве символа в значении заголовка, вы не можете использовать несколько заголовков с тем же именем, если только вы не устраните необходимость использования запятой.
Ответ 6
По моему скромному мнению, только те заголовки, значение которых может быть выражено (определено) с разделенной запятой, могут быть записаны в несколько заголовков с одним или несколькими значениями.
Скажем, у нас есть заголовок, значение которого может быть записано в список, разделенный запятыми.
Entries-In-Order: Jane,John,Charlie
Это значение заголовка действует по его определению, а сервер или клиент знает его. И тогда мы можем отделить его как
Entries-In-Order: Jane,John
Entries-In-Order: Charlie
Но любые заголовки не понимают, что значение, разделенное запятой, не может быть записано в несколько.
Who-Are-Responsible: John, Jane or maybe Charlie?
Если по определению сервер или клиент могут обрабатывать всю строку (John,Jane,maybe Charlie?
) как одно значение, запись ее в виде нескольких заголовков не будет работать должным образом.
My-Dummy-Header: John
My-Dummy-header: Jane or maybe Charlie?