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

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

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

Пример:

Key: value1;value2;value3
4b9b3361

Ответ 1

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

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

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

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

Key: value1,value2,value3

Ответ 2

всеми способами @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' в этом случае (для определенных имен полей заголовков)

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

Ответ 3

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

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