У меня есть сайт, где виртуальные хосты определены в /etc/apache2/sites-enabled/
с заголовком быть установлен с always
опции, как это:В чем разница между «всегда» и «onsuccess» в конфигурации заголовка Apache?
Header always set X-Frame-Options DENY
Если я теперь установлен один и тот же заголовок, используя .htaccess
в корневой папке веб-сайта, но без always
, тогда заголовок возвращается дважды в ответе сервера.
Установка в .htaccess
(среди прочих):
Header set X-Frame-Options DENY
Ответ сервера:
HTTP/1.1 200 OK
Date: Mon, 02 May 2016 16:02:29 GMT
Server: Apache/2.4.10 (Debian)
X-Frame-Options: DENY
Cache-Control: no-cache, no-store, must-revalidate, private
Pragma: no-cache
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Last-Modified: Mon, 02 May 2016 15:03:42 GMT
Accept-Ranges: bytes
Content-Length: 0
X-Frame-Options: DENY
X-XSS-Protection: 1
X-Content-Type-Options: nosniff
Cache-Control: no-cache, no-store, must-revalidate, private
Pragma: no-cache
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html
Документы Apache говорят, что без опции always
используется значение по умолчанию onsuccess
. Но они также говорят, что «... значение по умолчанию onsuccess не ограничивает действие ответами с кодом состояния 2xx ...» (http://httpd.apache.org/docs/current/en/mod/mod_headers.html#header).
Но если я не добавлю always
, тогда страницы ошибок, такие как 301 и 404, не будут иметь набор заголовков. С другой стороны, если я добавлю always
, тогда заголовки могут быть установлены дважды, если я использую значение по умолчанию (т. Е. onsuccess
) в .htaccess
. Как указано в docs: «повторение этой директивы с обоими условиями имеет смысл в некоторых сценариях, потому что всегда не является надмножеством onsuccess в отношении существующих заголовков». Настройка заголовков дважды не всегда действительна для ответа HTTP, см. https://stackoverflow.com/a/4371395/641481. Поэтому я хочу избежать этого, естественно.
Мой вопрос сейчас: когда я должен использовать onsuccess
(т. Е. Значение по умолчанию) и когда always
? Должен признаться, что даже после прочтения документов Apache пару раз я не совсем понимаю это. Прагматично кажется, что всегда использование always
приводит к правильному/ожидаемому поведению.
Я также не понимаю, почему Apache записывает заголовок дважды, если он установлен в always
и onsuccess
. Мне кажется, что это неправильно, но для этого должна быть веская причина, так как я полагаю, что Apache-разработчики знают намного больше, чем о HTTP ;-)
После обширного тестирования нет, '' set always'' НЕ переопределяет '' set''. – user5994461
@ user5994461: Вы, кажется, неправильно поняли мои слова: в первом предложении первого абзаца говорится, что «Заголовок» устанавливает «всегда переопределяет», но не говорит «всегда» переопределяет «набор». Ваши тесты просто подтвердили мою публикацию. Пожалуйста, верните вниз. –
Неправильно. Набор не переопределяет всегда и всегда не отменяет набор. Они работают независимо, если оба используются, HTTP-ответ получит 2 заголовка. – user5994461