В официальной документации Apache говорится, что:
• Таблица заголовков ответов «onsuccess (default)» → только для 2xx ответов
• «всегда» Таблица заголовков ответов → для всех ответов, включая 2xx
позже там говорится:
всегда не является расширенным набором успеха
если «таблица ответов всегда заголовков» включает 2xx, как это не может быть супернабором «onsuccess»?
пожалуйста, учтите, что у меня есть полный документ красного цвета, поэтому, пожалуйста, не повторяйте цитаты из документов Apache, мне нужен ответ, а не цитирования :), спасибо за ваше время
Вы пропустили часть импорта утверждения
всегда не является надмножеством успеха по отношению к существующим заголовкам:
Это немного сбивает с толку, но если вы прочитаете документацию, на которую вы ссылаетесь, это объяснит.
Эта разница между onsuccess и всегда является особенностью, возникшей в результате того, что httpd внутренне хранит заголовки для ответа HTTP, поскольку он не предлагает никакого «нормализованного» единого списка заголовков.
Вот моя попытка сделать пример из документации более понятным:
шаг 1 – Ваша заявка
response.status = 200
response.headers['X-Foo'] = 'bar'
return response
шаг 2: mod_proxymod_proxy sets headers in the always table and not in the default onSuccess table
Таблицы заголовков Apache:
x-Foo: bar
шаг 3: mod_headers
Header onSuccess set X-Foo: baz
Таблицы заголовков Apache:
x-Foo: bar
X-Foo: baz
шаг 4: ответ сервера
HTTP/1.1 200
Server: apache
x-Foo: bar
X-Foo: baz
Вот причина, по которой док заявляет
всегда не является надмножеством успеха по отношению к существующим заголовкам.
и это
повторение этой директивы с обоими условиями имеет смысл в некоторых сценариях
Опять же из примера, вы можете решить проблему с помощью:
mod_headers
Header always unset X-Foo
Header onSuccess set X-Foo: baz
если вы называете «существующие заголовки» «x-foo», это все равно ничего не меняет, почему? потому что если x-foo→baz присутствует всегда, это будет во всех ответах (2xx и во всех других ответах), и ничего на самом деле не изменится! Боже, благослови меня! мой разум будет ниже этого !!!!!
во-первых, спасибо, после этого, я думаю, в заголовке onSuccess установите строку X-Foo: baz предоставленного вами кода, она нам не нужна: так что просто удалите ее, последнее, но самое важное: я все еще не могу принять ваш ответьте, что вы подразумеваете под «относительно существующих заголовков»? приведенный вами пример ничего мне не проясняет, тем не менее «всегда» является расширенным набором «onsuccess», я буду признателен, если вы предоставите пример, который может показать нам, что таблица «onsuccess» используется, а «всегда» нет, это тот случай, который может показать нам, что «всегда» не является надмножеством «успеха».
Пример показывает, что установка заголовка onsuccess с помощью mod_header не переопределяет существующий заголовок. Возвращаются оба bar
и baz
. Обычно это нежелательное поведение. Если бы вы установили в заголовке значение «всегда», оно бы переопределило его, и был бы возвращен только baz.
Почему вы говорите, что вам не нужен «onSuccess set X-Foo: baz»? В этом вся суть примера. Если вы ДЕЙСТВИТЕЛЬНО хотите установить заголовки успеха с помощью mod_headers, это крайний случай, о котором вам нужно знать.
думаю, теперь я могу вас понять, поскольку header set
переопределит предыдущий набор определенного заголовка, поэтому, если бы «onsuccess» было подмножеством «всегда», мы не могли бы иметь что-то вроде: x-foo: baz
и x-foo: bar
одновременно, так что спасибо и я приму ваш ответ, так как он решает мою проблему
думаю, теперь я могу понять @ben, поскольку header set
переопределяет предыдущий набор определенного заголовка, поэтому, если бы «onsuccess» было подмножеством «всегда», мы не могли бы иметь что-то вроде: x-foo: baz
и x-foo: bar
одновременно
поэтому пример, предоставленный @ben, на самом деле был примером, который может показать нам, что таблица «onsuccess» используется, а «всегда» нет, потому что
• хотя мы не используем ни одного существующего заголовка, это примерно так:
• но при использовании это будет выглядеть так:
наконец, поскольку на самом деле это разные наборы заголовков, возможно, лучше продемонстрировать это как трехмерный рисунок, почему? поскольку они на самом деле не перекрывают друг друга, это два набора заголовков, через которые проходит ответ, прежде чем перейти к физическому проводу.
нам нужен пример, который может показать нам реальный сценарий, в котором «onsuccess» используется, а «всегда» — нет, и объяснить, почему это происходит.