2010-12-06 4 views
89

Я не нашел никакой спецификации о том, разрешены ли повторяющиеся заголовки 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»?

Спасибо.

Су

ответ

113

HTTP RFC2616 доступны here говорит:

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

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

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

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

Синтаксис #1cache-directive определяет список, по крайней мере, один кэш-директива элементов (см здесь для формального определения #values: Notational Conventions and Generic Grammar)

Так что, да,

Cache-Control: no-cache, no-store 

равносильна (порядок важен)

Cache-Control: no-cache 
Cache-Control: no-store 
+2

Спасибо за ваш быстрый ответ, Саймон! Но не относится ли цитируемый параграф из RFC 2616 к Cache-Control? Я что-то упускаю? – 2010-12-06 22:38:43

Смежные вопросы