Подтвердить что ты не робот

Установить более одного HTTP-заголовка с тем же именем?

Насколько я знаю, спецификацией HTTP разрешено устанавливать более одного HTTP-заголовка с тем же именем. Есть ли какой-либо прецедент для этого (от клиента к серверу и наоборот)?

HTTP 1.1 Раздел 4.2:

Несколько полей заголовка сообщения с одно и то же имя поля МОЖЕТ присутствовать в сообщение тогда и только тогда, когда весь значение поля для этого поля заголовка определяется как список, разделенный запятыми [то есть, # (значения)]. Он ДОЛЖЕН быть возможным объединить несколько полей заголовка в одно "имя-поля: значение поля" пара, не меняя семантики сообщения, добавляя каждый последующее значение поля для первого, каждая из которых разделена запятой. Приказ в которых поля заголовка с одинаковыми поэтому полевое имя получено существенный для интерпретации комбинированное значение поля и, следовательно, proxy НЕ ДОЛЖЕН изменять порядок эти значения полей, когда сообщение пересылаются.

Если я не ошибаюсь, нет случая, когда нужны несколько заголовков с тем же именем.

4b9b3361

Ответ 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?