Apache: разница между" Header always set "и"Header set"?

вопросы

  1. в чем разница между Header always set и Header set в Apache?
  2. то есть, что делает always изменение ключевого слова об обстоятельствах, при которых установлен заголовок?
  3. должен ли я всегда устанавливать свои заголовки с помощью always?
  4. есть ли причина не делать этого?

фон

я видел...

Header always set X-Frame-Options DENY

...а также как...

Header always set Access-Control-Allow-Headers "*"

...и я иногда слышу, что присутствие always ключевое слово гарантирует, что заголовок правильно установлен, или что просто лучше включить always ключевое слово в целом. Однако я никогда не находил четкого, окончательного ответа на почему это дело.

я уже проверил документы Apache для mod_headers, в котором только кратко упоминается always:

когда ваше действие-это функция для существующего заголовка может потребоваться указать условие always в зависимости от того, в какой внутренней таблице был установлен исходный заголовок. Таблица, соответствующая always, используется для локально сгенерированных ответов на ошибки, а также для успешных ответов. Обратите внимание также, что повторение этой директивы с обоими условиями имеет смысл в некоторых сценариях, потому что всегда не является надмножеством onsuccess по отношению к существующим заголовкам:

  • вы добавляете заголовок в локально сгенерированный неуспешный (не-2xx) ответ, такой как перенаправление, в этом случае в конечном ответе используется только таблица, соответствующая always.
  • вы изменяете или удаляете заголовок, созданный скриптом CGI, и в этом случае сценарии CGI находятся в таблице, соответствующей всегда, а не в таблице по умолчанию.
  • вы изменяете или удаляете заголовок, созданный некоторой частью сервера, но этот заголовок не найден по умолчанию onsuccess состояние.

насколько я могу судить, это означает, что Header set always гарантирует, что заголовок находится еще на 200 страниц. Однако мои HTTP-заголовки установлены с Header set всегда казалось, что применяется просто отлично на моих 404 страницах и тому подобное. Я что-то не так понял?

FWIW, я нашел такие сообщения, как в чем разница между "всегда" и "onsuccess" в конфигурации заголовка Apache?, но единственный ответ, который здесь не объяснить это явно для меня.

спасибо,
Калеб!--27-->

1 ответов


в чем разница между Header always set и Header set в Apache?

как говорится в процитированном бит из руководства, без "всегда" ваши дополнения будут выходить только на успешные ответы.

но это также включает "успешно" ошибки переадресации через mod_proxy и, возможно, другие подобные обработчики, которые примерно действуют как прокси. Что генерирует ваши 404s, которые вы нашли, чтобы не согласиться с руководством? 404 в локальном файле, безусловно, ведет себя как цитируемый бит описывает.

то есть, что ключевое слово always изменяет об обстоятельствах, при которых установлен заголовок?

API Apache хранит два списка, связанные с каждым запросом, заголовками и err_headers. Первый не используется, если сервер обнаруживает ошибку при обработке запроса, который является последним.

должен ли я всегда устанавливать свои заголовки, используя always?

Это зависит от их значимости. Давайте скажем, вы устанавливали заголовки управления кэшем, связанные с тем, что вы ожидали использовать для какого-то ресурса. Теперь предположим, что вы на самом деле подавали что-то вроде 400 или 502. Возможно, вы не захотите кэшировать это!

есть ли причина не делать этого?

см. выше.

-/ -

в руководстве также есть бит, который вы не цитировали, который объясняет прокси или CGI кода ошибки, но не для того, который Apache генерирует ответ ошибка:

необязательный аргумент condition определяет, какая внутренняя таблица заголовки ответов эта директива будет работать против. Несмотря на имя, значение по умолчанию onsuccess не ограничивает действие ответы с кодом состояния 2xx.

заголовки, заданные при этом условии, по-прежнему используются, когда, например, запрос успешно проксируется или генерируется CGI, даже если они сгенерировали состояние сбоя код.