Баг Basic HTTP-аутентификации

Я пытаюсь вытащить всю модель работы итерации авторизации и создал такой код в php

  1. Я создал 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?


Ответы (0 шт):