Баг Basic HTTP-аутентификации
Я пытаюсь вытащить всю модель работы итерации авторизации и создал такой код в php
- Я создал server.php файл со следующим контекстом see sample https://www.php.net/manual/ru/features.http-auth.php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="My Realm"');
header('HTTP/1.0 401 Unauthorized');
echo 'Wrong user and password';
exit;
} else {
echo "<p>Hello {$_SERVER['PHP_AUTH_USER']} for pass: {$_SERVER['PHP_AUTH_PW']}.</p>";
}
и начал авторизацию все хорошо но если смотреть xdebug после неудачной авторизации страница перезагружается и можно видеть что заголовок игнорируется где ни будь описано в документах это поведение браузера?
я заметил что поведение telnet принудительное закрытие подключение:
user@WIN-S1MP18O55RF:/mnt/d/openserver$ telnet 192.168.88.40 80
Trying 192.168.88.40...
Connected to 192.168.88.40.
Escape character is '^]'.
GET /server.php HTTP/1.1
Host: localhost
HTTP/1.0 401 Unauthorized
Date: Wed, 02 Mar 2022 13:40:56 GMT
Server: Apache
WWW-Authenticate: Basic realm="My Realm"
Content-Length: 23
Connection: close
Content-Type: text/html; charset=UTF-8
Wrong user and passwordConnection closed by foreign host.
user@WIN-S1MP18O55RF:/mnt/d/openserver$
Но если успех keep alive работает (возможно это сделано специально чтобы не держать соединение во время ввода логина и пароля)
user@WIN-S1MP18O55RF:/mnt/d/openserver$ telnet 192.168.88.40 80
Trying 192.168.88.40...
Connected to 192.168.88.40.
Escape character is '^]'.
GET /server.php HTTP/1.1
Host: localhost
Authorization: Basic MTox
HTTP/1.1 200 OK
Date: Wed, 02 Mar 2022 13:45:20 GMT
Server: Apache
Content-Length: 27
Content-Type: text/html; charset=UTF-8
<p>Hello 1 for pass: 1.</p>
по идее этот код должен вызвать цикл (2 раза вызывыется WWW-Authenticate но второй раз браузер игнорирует) но это не так
header('WWW-Authenticate: Basic realm="My Realm"');
echo "Cycle";
Вопрос собственно не в keep alive а почему php второй раз игнорирует заголовок аутентификации и выбрасывает 401?