Câu trả lời đơn giản là bạn không thể đăng xuất khỏi xác thực http.
Câu trả lời dài:
Http-auth (giống như phần còn lại của thông số HTTP) có nghĩa là không trạng thái. Vì vậy, "đăng nhập" hoặc "đăng xuất" không thực sự là một khái niệm có ý nghĩa. Cách tốt hơn để xem nó là hỏi, đối với mỗi yêu cầu HTTP (và hãy nhớ tải trang thường là nhiều yêu cầu), "bạn có được phép làm những gì bạn yêu cầu không?". Máy chủ xem mỗi yêu cầu là mới và không liên quan đến bất kỳ yêu cầu nào trước đó.
Các trình duyệt đã chọn ghi nhớ thông tin đăng nhập mà bạn nói với họ trên 401 đầu tiên và gửi lại mà không có sự cho phép rõ ràng của người dùng đối với các yêu cầu tiếp theo. Đây là một nỗ lực nhằm cung cấp cho người dùng mô hình "đăng nhập / đăng xuất" mà họ mong đợi, nhưng đó hoàn toàn là một loại bùn. Đó là trình duyệt mô phỏng trạng thái bền bỉ này. Các máy chủ web là hoàn toàn không biết về nó.
Vì vậy, "đăng xuất", trong bối cảnh http-auth hoàn toàn là một mô phỏng được cung cấp bởi trình duyệt và do đó nằm ngoài thẩm quyền của máy chủ.
Vâng, có bùn. Nhưng họ phá vỡ RESTful-ness (nếu điều đó có giá trị với bạn) và chúng không đáng tin cậy.
Nếu bạn hoàn toàn yêu cầu mô hình đăng nhập / đăng xuất để xác thực trang web của mình, thì cách tốt nhất là cookie theo dõi, với sự tồn tại của trạng thái được lưu trữ trên máy chủ theo cách nào đó (mysql, sqlite, Flatfile, v.v.). Điều này sẽ yêu cầu tất cả các yêu cầu được đánh giá, ví dụ, với PHP.