Organization: Institute for High Energy Physics, Protvino, Moscow reg., Russia
Felix Milovanov <felix@gambit.msk.su> wrote:
> http://gambit.msk.su/test/, Login - guest, pass - guest.
> При хождении по линкам - работает, при LOGOUT - выдает окошко
> о плохой авторизации на том-же realm. Ну и что ни дави - старый
> пассворд Netscape забыла. BACK, правда, сработает ( из кэша ) -
> но вот на линки уже не пустит ...
Мда. Если бы не работающий пример, так и пребывал бы в уверенности,
что это невозможно. :-) А дело тут более тонкое. Согласно RFCям,
realm для auth-type="basic" характеризуется только именем, и уже
задача браузера - ассоциировать его с деревом URL'ов, серверу остается
же ассоциировать его с деревом директорий. Казалось бы, достаточно
сказать браузеру код 401, чтобы он забыл пароли для всех своих
деревьев URL'ов, связанных одним общим именем realm'а.
Ан нет!
Нетскейп почему-то "забывает" credentials только для того дерева,
которое начинается от директории скрипта, и не "забывает" для других
деревьев. Что, по-моему, неправильно, т.к. обратную задачу он решает
вполне корректно - получив код 401 для неперекрывающегося поддерева,
смотрит на realm, находит credentials от уже авторизованной ветки и
повторяет запрос с хедером "Authenticate".
Более того, обнаружилось, что если Нетскейп помнит несколько деревьев
с одинаковым именем realm, то "забыть" уже ни одно не может. :-)
Наверное, потому, что он очищает у себя в памяти информацию только
об одном дереве, а при переходе на следующее с радостью находит
у себя в памяти те credentials, о которых должен был бы забыть.═:))
Taк что у меня получилось следующее: чтобы сделать кнопочку "LOGOUT",
надо скрипт расположить обязательно наверху (!) того дерева, которое
должно быть закрыто. Дерево должно быть одно. (!!) Иначе не выходит.
Полистав спецификацию HTTP/1.1, я пришел к выводу, что это все-таки
бага Нетскейпа, которую мозиллописцы из Стэка могут взять себе на
заметку. Кину еще один камень в огород Мозиллы: для proxy-запросов
NC-4.xx делает DNS lookup. Это явно лишнее.
--
Eugene Berdnikov
"Russian Apache" includes software developed
by the Apache Group for use in the Apache HTTP server project
(http://www.apache.org/) See
Apache LICENSE.
Copyright (C) 1995-2001 The Apache Group. All rights reserved.
Copyright (C) 1996 Dm. Kryukov; Copyright (C)
1997-2009 Alex Tutubalin. Design (C) 1998 Max Smolev.