Я разбираю заголовки HTTP. Я хочу разбить значения заголовков на массивы, где это имеет смысл.Как разделять значения заголовков?
Например, Cache-Control: no-cache, no-store
должен вернуть ['no-cache','no-store']
.
HTTP RFC2616 говорит:
Несколько полей заголовка с тем же имя поля может присутствовать в сообщении, если и только если все значения поля для этого поля заголовка определяется как список, разделенный запятыми [т.е., # (значения)]. Можно объединить несколько полей заголовка в одну строку «field-name: field-value» , не меняя семантики сообщения , добавив каждое последующее значение поля к первому, каждый , разделенный символом « », каждый из которых равен . запятая. Порядок, в котором получены поля заголовка с тем же имя поля имеет значение для интерпретации значения комбинированного поля, и, таким образом, прокси-сервер НЕ ДОЛЖЕН изменять порядок этих значений полей, когда сообщение пересылается
Но я не уверен, верно ли обратное - безопасно ли оно split по запятой?
Я уже нашел один пример, где это вызывает проблемы. Моя строка User-Agent, например,
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36
, т.е. он содержит запятую после "KHTML". Очевидно, что у меня не более одного пользовательского агента, поэтому разделить этот заголовок не имеет смысла.
Является ли строка User-Agent единственным исключением, или есть еще?
Ну, вот что я пытался сказать «Я не уверен, верно ли обратное». Где-то я могу найти список заголовков, которые поддерживают разделение запятой, чтобы я мог хотя бы создать черный или белый список? – mpen
@Mark Я пытался найти их, но [RFC2616] (http://tools.ietf.org/html/rfc2616), [RFC7230] (http://tools.ietf.org/html/rfc7230) и [RFC7231] (http://tools.ietf.org/html/rfc7231) не являются исчерпывающими. – CodeCaster