Существуют ли какие-либо стандарты для использования заголовков HTTP для ответов на успех/неудачу входа?
Правильные заголовки HTTP для успешных/неудачных ответов на вход?
Ответ 1
Заголовок, отправляемый сервером, является либо кодом подтверждения отказа 200 или 401, либо успешным или неудачным.
См. http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html Раздел 10.4.2 401 Несанкционированный для этого.
При отправке 401 сервер должен отправить
WWW-Authenticate = "WWW-Authenticate" ":" 1 # challenge
чтобы указать, какая схема должна использоваться для аутентификации.
См. http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html Раздел 14.47 WWW-Authenticate для этого.
Ответ 2
Существует только HTTP/1.0 401 Unauthorized
.
Но в последнее время я разработал этот "шаблон auth": первый раз, когда вы заходите на страницу, вы получаете 401
и экран входа в систему. Как только вы введете правильные данные для входа, вы получите 200
. Когда ваша сессия закончится или вы выйдете из системы, вы снова получите 401
и экран входа в систему. Экран входа всегда 401
, каждая другая страница 200
.
Ответ 3
Это зависит от того, что вы подразумеваете под "логином" и, возможно, также от того, как сервер/сервер обрабатывает логин/выход/авторизацию.
Обычно выражение "для входа" связано с сеансами. Один "входит в систему", делает то, что нужно сделать, а затем "выходит из системы". Сервер либо сохраняет информацию о сеансе, либо отправляет идентификатор сеанса в cooki клиенту, который затем отправляет файл cookie, чтобы сообщить серверу, что сеанс продолжается. Внутри сеанса переменные могут меняться, и их состояние постоянно между вызовами от клиента.
Интуитивно понятно, что при запуске сеанса должен быть какой-то ответ "Авторизованный", а также ответ "Несанкционированный (401)".
Однако HTTP - это протокол без учета состояния. Он не знает о состоянии, только о том, разрешен ли запрос или нет. Вот почему существует статус 401, но не имеет специального "разрешенного" кода состояния (поскольку, если запрос не является несанкционированным, он неявно разрешен).
Чтобы иметь возможность работать с сеансом на уровне HTTP (без использования такой конструкции, как PHP session_start()), авторизационные учетные данные должны отправляться с каждым запросом. Это то, что происходит, когда вы используете файл .htaccess для защиты папки, например. После предоставления в диалоговом окне пароля имени пользователя и пароля они впоследствии отправляются каждый раз, когда есть доступ в пределах области авторизации. Существует иллюзия "сеанса", но на самом деле имя пользователя и пароль отправляются по каждому запросу.