Если «таблица ответов всегда заголовков» включает 2xx, как это не может быть супернабором «onsuccess»?

В официальной документации Apache говорится, что:

• Таблица заголовков ответов «onsuccess (default)» → только для 2xx ответов
• «всегда» Таблица заголовков ответов → для всех ответов, включая 2xx

позже там говорится:

всегда не является расширенным набором успеха

если «таблица ответов всегда заголовков» включает 2xx, как это не может быть супернабором «onsuccess»?

пожалуйста, учтите, что у меня есть полный документ красного цвета, поэтому, пожалуйста, не повторяйте цитаты из документов Apache, мне нужен ответ, а не цитирования :), спасибо за ваше время

нам нужен пример, который может показать нам реальный сценарий, в котором «onsuccess» используется, а «всегда» — нет, и объяснить, почему это происходит.

TechDogLover OR kiaNasirzadeh 01.07.2024 14:44
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
4
1
107
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы пропустили часть импорта утверждения

всегда не является надмножеством успеха по отношению к существующим заголовкам:

Это немного сбивает с толку, но если вы прочитаете документацию, на которую вы ссылаетесь, это объяснит.

Эта разница между onsuccess и всегда является особенностью, возникшей в результате того, что httpd внутренне хранит заголовки для ответа HTTP, поскольку он не предлагает никакого «нормализованного» единого списка заголовков.

пример

Вот моя попытка сделать пример из документации более понятным:

шаг 1 – Ваша заявка

   response.status = 200
   response.headers['X-Foo'] = 'bar'
   return response

шаг 2: mod_proxy
mod_proxy sets headers in the always table and not in the default onSuccess table

Таблицы заголовков Apache:

Всегда onSuccess x-Foo: bar

шаг 3: mod_headers

Header onSuccess set X-Foo: baz

Таблицы заголовков Apache:

Всегда onSuccess x-Foo: barX-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 и во всех других ответах), и ничего на самом деле не изменится! Боже, благослови меня! мой разум будет ниже этого !!!!!

TechDogLover OR kiaNasirzadeh 04.07.2024 17:21

во-первых, спасибо, после этого, я думаю, в заголовке onSuccess установите строку X-Foo: baz предоставленного вами кода, она нам не нужна: так что просто удалите ее, последнее, но самое важное: я все еще не могу принять ваш ответьте, что вы подразумеваете под «относительно существующих заголовков»? приведенный вами пример ничего мне не проясняет, тем не менее «всегда» является расширенным набором «onsuccess», я буду признателен, если вы предоставите пример, который может показать нам, что таблица «onsuccess» используется, а «всегда» нет, это тот случай, который может показать нам, что «всегда» не является надмножеством «успеха».

TechDogLover OR kiaNasirzadeh 04.07.2024 17:21

Пример показывает, что установка заголовка onsuccess с помощью mod_header не переопределяет существующий заголовок. Возвращаются оба bar и baz. Обычно это нежелательное поведение. Если бы вы установили в заголовке значение «всегда», оно бы переопределило его, и был бы возвращен только baz.

Ben 05.07.2024 05:42

Почему вы говорите, что вам не нужен «onSuccess set X-Foo: baz»? В этом вся суть примера. Если вы ДЕЙСТВИТЕЛЬНО хотите установить заголовки успеха с помощью mod_headers, это крайний случай, о котором вам нужно знать.

Ben 05.07.2024 05:53

думаю, теперь я могу вас понять, поскольку header set переопределит предыдущий набор определенного заголовка, поэтому, если бы «onsuccess» было подмножеством «всегда», мы не могли бы иметь что-то вроде: x-foo: baz и x-foo: bar одновременно, так что спасибо и я приму ваш ответ, так как он решает мою проблему

TechDogLover OR kiaNasirzadeh 07.07.2024 18:43

думаю, теперь я могу понять @ben, поскольку header set переопределяет предыдущий набор определенного заголовка, поэтому, если бы «onsuccess» было подмножеством «всегда», мы не могли бы иметь что-то вроде: x-foo: baz и x-foo: bar одновременно

поэтому пример, предоставленный @ben, на самом деле был примером, который может показать нам, что таблица «onsuccess» используется, а «всегда» нет, потому что
• хотя мы не используем ни одного существующего заголовка, это примерно так:

• но при использовании это будет выглядеть так:

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

Другие вопросы по теме