Prosta odpowiedź jest taka, że nie można niezawodnie wylogować się z uwierzytelniania http.
Długa odpowiedź:
Http-auth (podobnie jak reszta specyfikacji HTTP) ma być bezstanowe. Zatem bycie „zalogowanym” lub „wylogowanym” nie jest tak naprawdę koncepcją, która ma sens. Lepszym sposobem, aby to zobaczyć, jest pytanie, przy każdym żądaniu HTTP (pamiętaj, że ładowanie strony to zwykle wiele żądań) „czy możesz zrobić to, o co prosisz?”. Serwer postrzega każde żądanie jako nowe i niezwiązane z żadnymi wcześniejszymi żądaniami.
Przeglądarki zdecydowały się zapamiętywać dane uwierzytelniające, które podajesz im w pierwszym 401, i wysyłać je ponownie bez wyraźnej zgody użytkownika na kolejne żądania. Jest to próba pokazania użytkownikowi modelu "zalogowania / wylogowania", jakiego oczekują, ale jest to czysta kludge. To przeglądarka symuluje tę trwałość stanu. Serwer sieciowy jest tego całkowicie nieświadomy.
Tak więc „wylogowanie” w kontekście http-auth jest czystą symulacją zapewnianą przez przeglądarkę, a więc poza władzą serwera.
Tak, są kludges. Ale łamią RESTful-ness (jeśli jest to dla ciebie wartościowe) i są zawodne.
Jeśli absolutnie potrzebujesz modelu zalogowania / wylogowania do uwierzytelnienia swojej witryny, najlepszym rozwiązaniem jest śledzący plik cookie, z trwałością stanu przechowywanego w jakiś sposób na serwerze (mysql, sqlite, flatfile itp.). Będzie to wymagało oceny wszystkich żądań, na przykład za pomocą PHP.