Hallo,
Vorab eine kurze Erklärung wie weit ich schon bin mit der Auswertung, hier ein Beispiellink:
http://user:password@www.homepage.de:80/verz1/../verz%202/index.html#headline1
da geht's schon los - die Übergabe von Benutzername und Password als Teil der URL ist zwar bei einigen Protokollen (z.B. FTP) üblich, bei HTTP aber ausdrücklich *nicht*. Diese Notation wird freundlicherweise und aus Kulanz von vielen Browsern auch akzeptiert, und sie setzen das intern in einen korrekten Request um (Credentials als separate HTTP-Header), richtig ist sie aber dennoch nicht.
Sähe der Link so aus, ist meine Auswertung bis zum "#headline1" fertig.
Gut, dann kannst du die Passwort-Auswertung ja auch drinlassen - vorausgesetzt, du bereitest sie auch zu einem korrekten Request auf.
Meine Frage hier: Welche Zeichen hinter "index.html" kann ich erwarten?
So ziemlich alle. ;-)
Vor allem darfst du auf der Clientseite den Teil zwischen Hostnamen und Hash nicht stur nach Muster interpretieren. Was in deinem Beispiel als "verz1/../verz%202/index.html" notiert ist, könnte mit Verzeichnissen und Dateien auf dem Server korrelieren, muss aber nicht. Auch http://example.com/de/title/anything/p sieht für den oberflächlichen Betrachter aus, als würde man eine Ressource "p" abrufen, die im Verzeichnis /de/title/anything liegt. Das ist aber reine Mutmaßung, es könnte ebensogut ein Script /de sein, das den restlichen URL-Schwanz /title/anything/p selbst auswertet.
Was ich sagen will: Es ergibt keinen wirklichen Sinn, diesen Teil weiter aufzudröseln, weil man sich damit in das Reich von Mutmaßungen begibt, aber keinen Nutzen daraus zieht.
Bekannt ist mir "#" für eine Textmarke und "?" um eine Parameterübergabe an, z.B. ein cgi-Script einzuleiten.
Ja, wobei das '?' aus der Sicht des Clients auch keine besondere Rolle spielt. Es wird erst vom Server ausgewertet und bekommt dort seine besondere Bedeutung. Das Raute-Zeichen '#' dagegen wird direkt vom Client ausgewertet - alles, was danach kommt, wird gar nicht erst an den Server übermittelt, weil es ja nur für eine Sprungmarke innerhalb des Dokuments steht.
Welche Zeichen habe ich nun noch nicht berücksichtigt und für was sind sie dann gut?
Auf die Schnelle fallen mir keine mehr ein.
Gilt für die Parameterübergabe die gleiche Konvention bezüglich nicht erlaubter Zeichen wie bei der URL? Also "LEERZEICHEN" wird zu "%20"?
Nicht ganz - im Query-String wird ein Leerzeichen üblicherweise als '+' codiert (ein echtes '+' dann als %2B), aber als %20 ist ebenso zulässig. Und alle Zeichen, die entweder im Bereich der ASCII-Steuercodes liegen (also 0x00..0x1F), sowie alle Zeichen außerhalb des ASCII-Bereichs (also ab 0x80 aufwärts) sollten (müssen?) URL-codiert sein, also mit Prozent-Zeichen und dem Bytewert in zweistelliger Hex-Notation.
Schönes Wochenende,
Martin
Jungs sind wie Waschmaschinen: Wenn man sie anmacht, kommen sie ins Schleudern.
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(