Правильные заголовки 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 для защиты папки, например. После предоставления в диалоговом окне пароля имени пользователя и пароля они впоследствии отправляются каждый раз, когда есть доступ в пределах области авторизации. Существует иллюзия "сеанса", но на самом деле имя пользователя и пароль отправляются по каждому запросу.