Sven Rautenberg: nun mal bitte der Reihe nach ...

Beitrag lesen

Moin!

nun mal der Reihe nach:

  1. die eigentliche URL wird vom Browser an den Server gesendet
  2. wegen der Auth-Direktive in der .htaccess schickt der Server einen 401-Header zurueck
  3. der Browser fragt das Passwort ab und sendet es an den Server
  4. die Seite wird ausgeliefert, falls das Passwort stimmt

Erst wenn das Passwort NICHT stimmt oder der User auf 'Abbrechen' clickt, kommt die Direktive fuer Error-401 ins Spiel, mit der man die Standardfehlerseite ueberschreibt.

Nein.

1. Der Browser ruft die Seite vom Server ab.
2. Der Server antwortet mit Status 401, schickt dabei auch gleich die Fehlerseite mit.
3. Der Browser kriegt den 401 und öffnet ein Eingabefenster.
3a. Wenn der User hier Abbrechen klickt, wird die soeben gesendete Fehlerseite angezeigt.
3b. Wenn der User ein Passwort eingibt, fordert der Browser die Seite vom Server NOCHMAL ab.
4. Wenn das Passwort stimmt, kommt jetzt die tatsächliche Seite, andernfalls springe zu 2. (kein Passwort == falsches Passwort)

Ein "ErrorDocument 401" verändert also die Seite, die man sieht, wenn man auf Abbrechen klickt.

Wenn du aber dieses ErrorDocument in ein Redirect wandelst, antwortet der Server schon in Punkt 2 nicht mit einem 401, sondern mit einem 301 oder 302 und liefert die Weiterleitung mit. Der Browser fragt also nicht nach dem Passwort, weil er keinen Status 401 kriegt, sondern er geht direkt zur neuen Location der Weiterleitung.

Deshalb unterm Strich: Man KANN Status 401 + Meta-Refresh NICHT durch eine HTTP-Weiterleitung für Status 401 ersetzen. PUNKT.

Erst wenn man statt dessen header(); verwendet, geht alles in die Hose, sprich, das Passwort wird gar nicht erst abgefragt. Das ist definitiv der falsche Ablauf !

Weil du dir nicht klarmachst (und das versucht Cheatah dir schon seit der ersten Minute zu verdeutlichen), was tatsächlich passiert. Das Klicken auf "Abbrechen" im Passwortdialog hat keine weitere Serverkommunikation zur Folge, sondern bewirkt lediglich das Anzeigen der Fehlerseite "Authentifizierung fehlgeschlagen" (diese kann mit ErrorDocument "schön" gemacht worden sein - solange das kein Redirect ist, ist alles bestens).

  • Sven Rautenberg