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