Discussion:
HTTP: Basic Auth & MSIE
(слишком старое сообщение для ответа)
Eugene Grosbein
2004-11-25 15:03:17 UTC
Permalink
Привет!

Странное отличие работы MSIE и Netscape.

Есть CGI, работает под Apache, доступ к которому ограничен
через Basic HTTP Authorization, в результате чего пользователью
перед входом на URL браузер выдает запрос имени и пароля,
все стандартно.

В HTML, выводимом этим CGI есть одна кнопочка (с тем же action, что
наш URL), при нажатии на которую происходит submit методом POST формы,
состоящей из этой одной кнопочки. В ответ сервер выдает:

HTTP/1.1 401 Authorization Required
Expires: Thu, 01 Jan 1970 07:00:00 GMT
WWW-Authenticate: Basic realm="PasswordProtection"

После чего браузер запрашивает имя и пароль у пользователя повторно
и снова делает тот же submit формы. CGI видит повторную авторизацию
и отвечает:

Content-Type: text/html\n
Expires: Thu, 01 Jan 1970 07:00:00 GMT
Pragma: no-cache
Cache-Control: no-cache

<html><head><meta http-equiv="Refresh" content="0; URL=..."></head></html>

URL все тот же.

До сих пор и Netscape, и MSIE работают одинаково и пользователь
имеет возможность, таким образом, перелогиниться и зайти с другого
аккаунта. Однако, Refresh они обрабатывают по-разному. Netscape,
как и положено, делает новый запрос уже с новым логином, а MSIE показывает
зашированную страницу со старыми данными.

Это лечится? Использовать cookies не предлагать.

Eugene
Igorx Ivanov
2004-11-25 17:08:33 UTC
Permalink
Post by Eugene Grosbein
HTTP/1.1 401 Authorization Required
Expires: Thu, 01 Jan 1970 07:00:00 GMT
Разве первого января 1970 года уже был протокол HTTP?
Eugene Grosbein
2004-11-25 21:25:08 UTC
Permalink
Post by Eugene Grosbein
HTTP/1.1 401 Authorization Required
Expires: Thu, 01 Jan 1970 07:00:00 GMT
II> Разве первого января 1970 года уже был протокол HTTP?

А копирайты почему не ставишь? Этой фразе уже много лет.

Eugene
Igorx Ivanov
2004-11-26 11:36:14 UTC
Permalink
Post by Eugene Grosbein
Post by Igorx Ivanov
Post by Eugene Grosbein
HTTP/1.1 401 Authorization Required
Expires: Thu, 01 Jan 1970 07:00:00 GMT
Разве первого января 1970 года уже был протокол HTTP?
А копирайты почему не ставишь? Этой фразе уже много лет.
(c) Сергей Дацюк АОТ: http://rosd.org.ru/Ro/SD_Autor_and_Copyright.html
Valentin Davydov
2004-11-26 06:14:29 UTC
Permalink
Date: Thu, 25 Nov 2004 18:03:17 +0300
До сих пор и Netscape, и MSIE работают одинаково и пользователь
имеет возможность, таким образом, перелогиниться и зайти с другого
аккаунта. Однако, Refresh они обрабатывают по-разному. Netscape,
как и положено, делает новый запрос уже с новым логином, а MSIE показывает
зашированную страницу со старыми данными.
Это лечится? Использовать cookies не предлагать.
Жабаскриптом. Который проверяет название броузера на вшивость и т.д.,
в лучших традициях уеб-дизайна. А если серьёзно, то передавать рефреш
не метой, а в http-хедерах, авось пробьёт. Меты при живом http-сервере
вообще, того-с, не совсем кошерно.

Вал. Дав.
Valentin Davydov
2004-11-26 06:14:30 UTC
Permalink
Date: Thu, 25 Nov 2004 18:03:17 +0300
Есть CGI, работает под Apache, доступ к которому ограничен
через Basic HTTP Authorization, в результате чего пользователью
перед входом на URL браузер выдает запрос имени и пароля,
все стандартно.
В HTML, выводимом этим CGI есть одна кнопочка (с тем же action, что
наш URL), при нажатии на которую происходит submit методом POST формы,
HTTP/1.1 401 Authorization Required
Expires: Thu, 01 Jan 1970 07:00:00 GMT
WWW-Authenticate: Basic realm="PasswordProtection"
Ещё один, гхм. Не было в 1970 году никаких http.
После чего браузер запрашивает имя и пароль у пользователя повторно
и снова делает тот же submit формы. CGI видит повторную авторизацию
Content-Type: text/html\n
Серьёзно "\n" в конце только этой строки?
Expires: Thu, 01 Jan 1970 07:00:00 GMT
Pragma: no-cache
Cache-Control: no-cache
<html><head><meta http-equiv="Refresh" content="0; URL=..."></head></html>
URL все тот же.
Ну и зачем тут мета? Если бы это ещё статиком на файловой системе
лежало, то куда ни шло, но ведь у тебя живой http сервер. Пусть он
рефреши и отдаёт штатным образом, в заголовке.
До сих пор и Netscape, и MSIE работают одинаково и пользователь
имеет возможность, таким образом, перелогиниться и зайти с другого
аккаунта. Однако, Refresh они обрабатывают по-разному. Netscape,
как и положено, делает новый запрос уже с новым логином, а MSIE показывает
зашированную страницу со старыми данными.
Очевидно, MSIE писали примерно так же.
Это лечится? Использовать cookies не предлагать.
Ну, используй тогда жабаскрипт, который смотрит версию браузера и т.д.,
в лучших традициях уеб-дизайна.

Вал. Дав.
Eugene Grosbein
2004-11-26 11:53:30 UTC
Permalink
Post by Eugene Grosbein
HTTP/1.1 401 Authorization Required
Expires: Thu, 01 Jan 1970 07:00:00 GMT
WWW-Authenticate: Basic realm="PasswordProtection"
VD> Ещё один, гхм. Hе было в 1970 году никаких http.

Hе оригинально.
Post by Eugene Grosbein
После чего браузер запрашивает имя и пароль у пользователя повторно
и снова делает тот же submit формы. CGI видит повторную авторизацию
Content-Type: text/html\n
VD> Серьёзно "\n" в конце только этой строки?

Опечатка.
Post by Eugene Grosbein
Expires: Thu, 01 Jan 1970 07:00:00 GMT
Pragma: no-cache
Cache-Control: no-cache
<html>><head><meta http-equiv="Refresh" content="0; URL=..."></head></html>
Post by Eugene Grosbein
URL все тот же.
VD> Hу и зачем тут мета? Если бы это ещё статиком на файловой системе
VD> лежало, то куда ни шло, но ведь у тебя живой http сервер. Пусть он
VD> рефреши и отдаёт штатным образом, в заголовке.
Post by Eugene Grosbein
До сих пор и Netscape, и MSIE работают одинаково и пользователь
имеет возможность, таким образом, перелогиниться и зайти с другого
аккаунта. Однако, Refresh они обрабатывают по-разному. Netscape,
как и положено, делает новый запрос уже с новым логином, а MSIE показывает
зашированную страницу со старыми данными.
Закешированную - тоже опечатка в квоте.

Eugene
Eugene Grosbein
2004-11-26 11:59:56 UTC
Permalink
Post by Eugene Grosbein
До сих пор и Netscape, и MSIE работают одинаково и пользователь
имеет возможность, таким образом, перелогиниться и зайти с другого
аккаунта. Однако, Refresh они обрабатывают по-разному. Netscape,
как и положено, делает новый запрос уже с новым логином, а MSIE показывает
зашированную страницу со старыми данными.
Это лечится? Использовать cookies не предлагать.
VD> Жабаскриптом. Который проверяет название броузера на вшивость и т.д.,
VD> в лучших традициях уеб-дизайна. А если серьёзно, то передавать рефреш
VD> не метой, а в http-хедерах, авось пробьёт. Меты при живом http-сервере
VD> вообще, того-с, не совсем кошерно.

Мне обязательно надо инициировать новый, совсем новый HTTP-запрос.
Потому что если будет редирект средствами HTTP, то это будет
непрерывный relogin.

В общем, проблему я решил в тот же день, добавив в первоначальный
ответ 401 такие заголовки:

Pragma: no-cache
Cache-Control: no-cache

Вопрос закрыт.

Eugene
Eugene Grosbein
2004-11-26 17:43:25 UTC
Permalink
Post by Eugene Grosbein
Post by Igorx Ivanov
Post by Eugene Grosbein
HTTP/1.1 401 Authorization Required
Expires: Thu, 01 Jan 1970 07:00:00 GMT
Разве первого января 1970 года уже был протокол HTTP?
А копирайты почему не ставишь? Этой фразе уже много лет.
II> (c) Сергей Дацюк

Чернов хорош, когда занимается технологией. Когда словоблудством, вовсе нет.

Eugene
--
Тестоголовые кислое свое брожение приняли за душу, распарывание чрев
своих - за историю, средства, оттягивающие разложение - за цивилизацию...
Loading...