Apache: разница между" Header always set "и"Header set"?
вопросы
- в чем разница между
Header always set
иHeader set
в Apache? - то есть, что делает
always
изменение ключевого слова об обстоятельствах, при которых установлен заголовок? - должен ли я всегда устанавливать свои заголовки с помощью
always
? - есть ли причина не делать этого?
фон
я видел...
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, даже если они сгенерировали состояние сбоя код.