Re: как удалить куку из request header?
Maxim Dounin
mdounin на mdounin.ru
Пт Дек 9 10:49:04 UTC 2011
Hello!
On Fri, Dec 09, 2011 at 04:36:48AM -0500, vgoncharov wrote:
> Всем привет!
>
> Подскажите, как правильно удалить куку
> из заголовка запроса?
> При этом в заголовке кук несколько, а
> надо удалить только одну с именем
> jstree_open.
>
> Вот подробная причина, по которой это
> надо.
>
> Backend достаточно неповоротливый в
> настройках: Oracle XML DB Server
> Frontend: nginx
>
> Веб-приложение использует jstree для
> отображения иерархических данных.
> Состояние узлов дерева
> (открыто/закрыто) запоминается в куке
> jstree_open.
> При этом это приложение использует и
> другие куки.
>
> Каждая из кук нужна для правильной
> работы backend'а, однако кука jstree_open на
> бакэнде совергенно бесполезна. Прои
> этом на больших деревьях создается
> большая кука jstree_open. Backend при получении
> такой большой куки выдает 500 Internal Server
> Error.
>
> Предполагаемое решение: необходимо
> удалить одну (только одну) куку jstree_open
> из заголовка запроса перед передачей
> его на backend.
>
> Предполагаемое неправильное понимание
> вопроса: client_header_buffer_size и large_client_header_buffers
> не могут решить проблемы, так как
> проблема не в nginx, а в backend. Nginx же с
> имеющимися куками справляется
> (благодаря этим настройкам).
>
> Другое предполагаемое неправильное
> решение: Удаление заголовка запроса
> Cookie: не поможет, так как приложение
> требует наличия всех остальных кук
> (несколько штук).
Выкусывайте нужное из $http_cookie, а дальше
proxy_set_header Cookie "то что осталось";
Выкусить, наверное, даже получится с помощью модуля rewrite (if с
регулярым выражением + set). Как-то так:
set $rest $http_cookie;
if ($http_cookie ~ "^(.*[,; ])?jstree_open=[^,;]*(.*)$") {
set $rest "$1$2";
}
proxy_set_header Cookie $rest;
Completely untested, регулярное выражение скорее всего требует
доработки.
Maxim Dounin
Подробная информация о списке рассылки nginx-ru