molily: URI syntax

Beitrag lesen

Rate mal, warum http://www.songklub.de/index.htm?/festival/2005/programm.htm hier nicht angenommen wird ;-)

Das nimmt aber deren Webserver an. Die Version mit "%2F" nicht.

Dem Webserver ist es das relativ egal: Der nimmt (als HTTP-Anfrage) beides an. Ob den Adressen dabei eine Ressource auf dem Server entspricht, ist eine andere Frage.

Das Problem bei obiger URI ist, dass der Query-String über JavaScript ausgelesen wird und dann damit das Frameset gefüllt wird:

var dokument=location.search;
if(dokument)
frames.rechts.location.href=dokument.substring(1,dokument.length);

Bei der URI http://www.songklub.de/index.htm?/festival/2005/programm.htm ist location.search gleich »?/festival/2005/programm.htm«. Daraus baut das Script die relative Adresse »/festival/2005/programm.htm« zusammen, welche dem einen Frame zugewiesen wird. An den Server wird dann »GET /festival/2005/programm.htm HTTP/1.1« geschickt, was problemlos funktioniert und die gewünschte Seite liefert.

Bei der URI http://www.songklub.de/index.htm?%2Ffestival%2F2005%2Fprogramm.htm ist location.search gleich »?%2Ffestival%2F2005%2Fprogramm.htm«. Daraus baut das Script die relative Adresse »%2Ffestival%2F2005%2Fprogramm.htm« zusammen, welche dem einen Frame zugewiesen wird. An den Server wird dann »GET %2Ffestival%2F2005%2Fprogramm.htm HTTP/1.1« geschickt, was ein ein 404 Not Found erzeugt, denn eine Ressource mit diesem Namen gibt es auf dem Server nicht (weil »/« nicht in Dateinamen vorkommen kann).

Es ist also eine Unzulänglichkeit des Scripts. Es hätte »%2F« durch »/« ersetzen müssen. Leider bedenken die wenigsten »Frame-Nachlade-Scripte« dies und erzeugen a) nicht RFC-1738-konforme URLs und b) nehmen keine RFC-1738-konformen URLs entgegen.

Mathias