La respuesta simple es que no puede cerrar sesión de forma confiable en la autenticación http.
La respuesta larga:
Http-auth (como el resto de la especificación HTTP) no tiene estado. Por lo tanto, estar "conectado" o "desconectado" no es realmente un concepto que tenga sentido. La mejor manera de verlo es preguntando, para cada solicitud HTTP (y recuerde que una carga de página suele ser varias solicitudes), "¿se le permite hacer lo que está solicitando?". El servidor ve cada solicitud como nueva y no relacionada con ninguna solicitud anterior.
Los navegadores han optado por recordar las credenciales que les dices en el primer 401 y volver a enviarlas sin el permiso explícito del usuario en solicitudes posteriores. Este es un intento de darle al usuario el modelo "conectado / desconectado" que esperan, pero es puramente un error. Es el navegador que simula esta persistencia de estado. El servidor web lo desconoce por completo.
Entonces, "cerrar sesión", en el contexto de http-auth, es puramente una simulación proporcionada por el navegador y, por lo tanto, está fuera de la autoridad del servidor.
Sí, hay kludges. Pero rompen el RESTfulness (si eso es de valor para usted) y no son confiables.
Si necesita absolutamente un modelo de inicio / cierre de sesión para la autenticación de su sitio, la mejor opción es una cookie de seguimiento, con la persistencia del estado almacenado en el servidor de alguna manera (mysql, sqlite, flatfile, etc.). Esto requerirá que todas las solicitudes sean evaluadas, por ejemplo, con PHP.