Допустимы ли повторяющиеся заголовки ответов HTTP?

Я не нашел никакой спецификации о том, разрешено ли дублирование HTTP-заголовков ответа стандартом, но мне нужно знать, не вызовет ли это проблемы с совместимостью.

Скажем, у меня есть заголовок ответа:

HTTP/1.1 302 Moved Temporarily
Server: Apache-Coyote/1.1
X-Powered-By: Servlet 2.4; JBoss-4.0.3SP1 (build: CVSTag=JBoss_4_0_3_SP1 date=200510231054)/Tomcat-5.5
Cache-Control: no-cache
Cache-Control: no-store
Location: http://localhost:9876/foo.bar
Content-Language: en-US
Content-Length: 0
Date: Mon, 06 Dec 2010 21:18:26 GMT

Обратите внимание, что есть два заголовка Cache-Control с разными значениями. Браузеры всегда относятся к ним так, как будто они написаны как "Cache-Control: no-cache, no-store"?

Ответ 1

да

HTTP RFC2616, доступный здесь, говорит:

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

Таким образом, можно использовать несколько заголовков с одним и тем же именем (в таком случае используется www-authenticate), если все значение поля определено как список значений, разделенных запятыми.

Контроль кэша задокументирован здесь: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9, например так:

Cache-Control   = "Cache-Control" ":" 1#cache-directive

#1cache-directive определяет список, по крайней мере, одного элемента директивы кэша (формальное определение #values: условные обозначения и общая грамматика см. Здесь)

Так да,

Cache-Control: no-cache, no-store

эквивалентно (порядок важен)

Cache-Control: no-cache
Cache-Control: no-store