Допустимы ли повторяющиеся заголовки ответов 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 98

1 ответ:

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

может присутствовать несколько полей заголовка сообщения с одним и тем же именем Поля в сообщении, если и только если все поле-значение для этого заголовка поле определяется как разделенный запятыми список [т. е., #(значения)]. Он должен можно объединить несколько полей заголовка в одну пара "поле-Имя: поле-Значение", без изменения семантики сообщение, добавляя каждое последующее значение поля к первому, каждый через запятую. Порядок, в котором поля заголовка с тем же поле-Имя получено, следовательно, являются существенными для толкования объединенного значения поля, и, таким образом, прокси-сервер не должен изменять порядок значений этих полей при пересылке сообщения

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

Cache-control is документально здесь:http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9 Вот так:

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

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

да,

Cache-Control: no-cache, no-store

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

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