HTTP 401-что такое соответствующее значение заголовка WWW-Authenticate?
приложение, над которым я работаю в данный момент, имеет значение таймаута сеанса. Если пользователь не взаимодействовал дольше, чем это значение, на следующей странице, которую он пытается загрузить, ему будет предложено войти в систему.
все запросы направляются через этот механизм, который включает вызовы AJAX. Первоначально мы отправляли заголовок 200 со страницей входа, который вводит некоторые проблемы с AJAX, так как код запускается, если отправляется ответ 200, и большинство данных отправляются обратно из этих вызовов RPC является ли JSON или raw JavaScript, который оценивается (не спрашивайте :/).
я предположил, что 401 лучше, так как наш парсер JSON не будет пытаться использовать страницу входа в HTML.. :)
, когда чтение спецификаций, однако, я заметил, что WWW-Authenticate
поле также должно быть отправлено.
что является хорошим значением для этого поля? Будет Application Login
достаточно?
3 ответа:
при указании http Basic Authentication мы возвращаем что-то вроде:
WWW-Authenticate: Basic realm="myRealm"
, тогда как
Basic
- Это схема, а остаток очень сильно зависит от этой схемы. В этом случае realm просто предоставляет браузеру литерал, который может отображаться пользователю при запросе идентификатора пользователя и пароля.вы, очевидно, не используете Basic, однако, поскольку нет смысла иметь истечение сеанса, когда используется Basic Auth. Я предполагаю, что вы используете некоторые формы проверка подлинности на основе.
из воспоминаний ответ на вызов Windows использует другую схему и другие аргументы.
фишка в том, что это зависит от браузера, чтобы определить, какие схемы он поддерживает и как он реагирует на них.
моя интуиция, если вы используете аутентификацию на основе форм, должна оставаться на странице 200 + relogin, но добавить пользовательский заголовок, который браузер будет игнорировать, но ваш AJAX может идентифицировать.
для действительно хорошего пользователя + AJAX опыт, получить скрипт, чтобы повесить на AJAX-запрос, который нашел сеанс истек, запустить запрос relogin через всплывающее окно, и на успех, повторно отправить исходный запрос AJAX и продолжить как обычно.
избегайте обмана, который просто получает скрипт, чтобы попасть на сайт каждые 5 минут, чтобы сохранить сеанс живой причиной, которая просто побеждает точку истечения срока действия сеанса.
другая альтернатива-записать запрос AJAX, но это плохой пользовательский интерфейс.
нет, вам нужно будет указать метод аутентификации для использования (обычно "базовый") и область аутентификации. См.http://en.wikipedia.org/wiki/Basic_access_authentication для примера запроса и ответа.
вы также можете прочитать RFC 2617 - HTTP аутентификация: базовая и дайджест-аутентификация доступа.
когда время сеанса пользователя истекает, я отправляю обратно код состояния HTTP 204. Обратите внимание, что состояние HTTP 204 не содержит содержимого. На стороне клиента я делаю так:
xhr.send(null); if (xhr.status == 204) Reload(); else dropdown.innerHTML = xhr.responseText;
вот функция Reload ():
function Reload() { var oForm = document.createElement("form"); document.body.appendChild(oForm); oForm.submit(); }