Допустимы ли дубликаты заголовков ответа HTTP? - PullRequest
105 голосов
/ 07 декабря 2010

Я не нашел никакой спецификации о том, разрешены ли в стандарте дубликаты заголовков ответа 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 Ответ

130 голосов
/ 07 декабря 2010

Да

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

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

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

Документирование Cache-controlздесь: 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...