Стандарт для добавления нескольких значений одного заголовка HTTP в запрос или ответ - PullRequest
54 голосов
/ 23 июня 2010

Если я хочу добавить список значений в качестве заголовка HTTP, есть ли стандартный способ сделать это? Я не мог найти ничего (что я мог бы легко понять) в RFC 822. Например, это значения, разделенные запятыми, стандартные значения или значения, разделенные запятой. Есть ли вообще стандарт?

Пример:

Key: value1;value2;value3

Ответы [ 3 ]

82 голосов
/ 23 июня 2010

Вы захотите взглянуть на спецификацию HTTP RFC 2616 , где написано:

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

Это означает, что вы можете отправлять один и тот же заголовок несколько раз в ответе с разными значениями, если эти значения можно добавлять друг к другу с помощью запятой. Это также означает, что вы можете отправлять несколько значений в одном заголовке, объединяя их запятыми.

Так в вашем случае это будет:

Key: value1,value2,value3
6 голосов
/ 16 июля 2016

всеми средствами @ marc-novakowski вы сужаете «проблему» :)

обычно (в соответствии со спецификацией HTTP) мы отделяем каждое значение от других, используя запятую ','

но мы рассмотрим простой случай:

Cookie-set: language=pl; expires=Sat, 15-Jul-2017 23:58:22 GMT; path=/; domain=x.com   
Cookie-set: id=123 expires=Sat, 15-Jul-2017 23:58:22 GMT; path=/; domain=x.com; httponly   

как вы присоединяете такие заголовки, когда значения одно от другого отделяются запятыми - случай, когдаможет появиться кома ???

тогда ответственность "клиента" состоит в том, чтобы выбрать и решить стратегию например, drop, merg (если слить как)?

Просьба взглянуть на реализацию Mozilla nsHttpHeaderArray

https://github.com/bnoordhuis/mozilla-central/blob/master/netwerk/protocol/http/nsHttpHeaderArray.h#L185

mozilla выбрать использовать разделитель новой строки '\n ' в этом случае (для определенных имен полей заголовка)

Я рекомендую, когда вы сталкиваетесь с такой ситуацией, искать в общих существующих решениях - так как они предоставляют знакомую схему

4 голосов
/ 30 октября 2016

Однако не все значения с одинаковым именем поля могут быть объединены в список значений поля.Например, в RFC 7230 мы можем прочитать

Примечание. На практике поле заголовка «Set-Cookie» ([RFC6265]) часто появляется несколько раз в ответном сообщении.и не использует синтаксис списка, нарушая вышеуказанные требования для нескольких полей заголовка с одним и тем же именем.Поскольку его нельзя объединить в одно значение поля, получатели должны обрабатывать «Set-Cookie» как особый случай при обработке полей заголовка.(Подробнее см. Приложение A.2.3 [Kri2001].)

...