Apache-2.2 Set-Cookie по логике из заголовка ответа

Мне нужно установить файл cookie на основе заголовка ответа (в отличие от заголовка запроса). Заголовок ответа устанавливается вызовом SOAP к серверной части и находится вне контроля Apache.

Я просмотрел SetEnvIf, но в нем говорится, что он исследует только заголовки запросов. Конструкция mod_rewrite {HTTP:parm} также применима только к заголовкам запросов.

  1. Входящий запрос
  2. Заголовок ответа генерируется серверной частью
  3. Apache исследует заголовок ответа FooBar
  4. Apache добавляет Set-Cookie, если значение FooBar заголовка ответа соответствует «string»

Есть идеи?


person sastorsl    schedule 04.05.2017    source источник


Ответы (1)


похоже, это можно сделать с помощью mod_headers, но, к сожалению, только с Apache 2.4, поскольку выражения были добавлены только в 2.4. Вы бы сделали что-то вроде:

Header set Set-Cookie "cookie-contents-here" "expr=%{resp:Content-Type} =~ m|application/pdf|"

Если вы не можете обновиться до версии 2.4, вы можете подумать о том, чтобы поставить Varnish Cache перед установкой Apache. Это мощный HTTP-процессор, который может легко изменить ответ за вас. Вы также можете реализовать кеширование с его помощью и повысить производительность своего сайта, но его можно просто использовать в качестве сквозного процессора HTTP, если вы не хотите этого делать. Возможно, есть более простое решение, но оно сработает.

Другой вариант может заключаться в том, чтобы поместить слой между Apache и вашим сервером, например PHP-скрипт, который обрабатывает передачу вызова серверу и модифицирует заголовки на обратном пути. Вероятно, это не очень хорошо для производительности; лучше обновить Apache или внедрить Varnish Cache.

Если вы используете отдельный бэкенд, неподконтрольный Apache, вы можете полностью исключить Apache из цикла и сразу перейти от Varnish Cache к своему бэкенду.

Надеюсь, идеи помогут.

person Community    schedule 04.05.2017
comment
Мы пока застряли на apache-2.2. Он входит в состав IBM HTTP Server 8, который все еще имеет версию 2.2. Я рассматриваю вариант IHS 9, который имеет apache-2.4, но на рабочем сервере это займет некоторое время. Спасибо за ваш ответ :-) - person sastorsl; 05.05.2017