URL-Encoding
URL-Kodierung
Die URL-Kodierung (engl. url encoding) wird verwendet, wenn beim Aufruf einer Internet-Seite Informationen vom Web-Browser an den Web-Server übergeben werden.
In der Adressleiste eines Web-Browsers können nicht nur die Adresse (URL) einer Web-Seite eingegeben werden, sondern - durch "?" (Fragezeichen) getrennt - weitere Informationen, die für den Server bestimmt sind. So könnte beispielsweise
http://www.example.net/index.html?lang=DE
bewirken, dass die Einstiegsseite index.html der Domäne example.net in deutscher Sprache angezeigt wird. Bei lang handelt es sich dabei um einen URL-Parameter, dem im obigen Beispiel der Wert "DE" zugewiesen ist. Dieser Wert könnte vom Server als Länderkennzeichen interpretiert werden und die Anzeige einer deutschsprachigen Web-Seite bewirken.
Mehrere Parameterzuweisungen in der URL werden durch "&" (Kaufmanns-UND) voneinander separiert, z.B.
http://www.example.net/index.html?login=Mustermann&passwort=a8zbs
Im obigen Beispiel werden die beiden URL-Parameter login und passwort deklariert und ihnen Werte zugewiesen. Würde allerdings das Passwort nicht a8zbs, sondern 2&z=B lauten, dann darf nicht einfach die URL
http://www.example.net/index.html?login=Mustermann&passwort=2&z=B
an den Server gesendet werden, denn das Zeichen "&" im Passwort würde als Trennzeichen zwischen den Parametern angesehen werden und der Server würde dies derart interpretieren, dass ihm folgende Daten übergeben wurden:
Parameter | Wert |
---|---|
login | Mustermann |
passwort | 2 |
z | B |
Eigentlich sollte der Server jedoch folgende Daten übermittelt bekommen:
Parameter | Wert |
---|---|
login | Mustermann |
passwort | 2&z=B |
Das Problem liegt darin, dass gewisse Zeichen in einer URL besondere Bedeutungen haben, wie zum Beispiel "&" und "=". Diese Zeichen werden auch als reserviert bezeichnet. Reservierte Zeichen, die in zu übertragenen Daten enthalten sind, müssen kodiert werden. Dies geschieht, indem in den Daten statt eines reservierten Zeichens das Zeichen "%" (Prozentzeichen), gefolgt vom zweistelligen Hex-Code seiner US-ASCII-Darstellung angegeben werden.
Im Hinblick auf das obige Beispiel bedeutet dies, das das Zeichen "&" im Passwort durch "%26" zu ersetzen ist, da es den US-ASCII-Code 38 besitzt, was in hexadezimaler Darstellung dem Wert 26 entspricht. Analog hierzu besitzt das Zeichen "=" den hexadezimalen US-ASCII-Code 3D. Werden in den zu übermittelnden Daten das Zeichen "&" durch "%26" und das Zeichen "=" durch "%3D" ersetzt, so lautet die gesamte URL nun
http://www.example.net/index.html?login=Mustermann&passwort=2%26z%3DB
Diese URL bewirkt, dass dem Server tatsächlich das gewünschte Passwort übergeben wird:
Parameter | Wert |
---|---|
login | Mustermann |
passwort | 2&z=B |
In einer URL wird das Zeichen "&" stets als Trennzeichen interpretiert; kommt dieses in den zu übermittelnden Daten vor, so wird es dort durch die Zeichenfolge "%26" ausgedrückt. Ebenso wird das Zeichen "=" stets als Trennzeichen zwischen Parametername und Parameterwert verstanden; in den zu übermittelnden Daten ist das Zeichen "=" dagegen durch "%3D" ersetzt.
Folgende Zeichen sind in einer URL reserviert:
% : / ? # [ ] @ ! $ & ' ( ) * + , ; =
Folgende Zeichen sind nicht-reservierte Zeichen:
- Minus-Zeichen "-" (US-ASCII 45)
- Punkt "." (US-ASCII 46)
- Ziffern "0" bis "9" (US-ASCII 48 bis 47)
- Kleinbuchstaben "a" bis "z" (US-ASCII 65 bis 90)
- Unterstrich "_" (US-ASCII 95)
- Großbuchstaben "A" bis "Z" (US-ASCII 97 bis 122)
- Tilde "~" (US-ASCII 126)
Nicht-reservierte Zeichen in URL-Daten können URL-kodiert werden (z.B. %7E für die Tilde), sollten es aber nicht. Dagegen müssen alle reservierten Zeichen grundsätzlich URL-kodiert werden, da sie ansonsten vom Server fehlinterpretiert werden könnten. Andere Zeichen, d.h. Steuer- und Sonderzeichen außerhalb des US-ASCII-Code-Bereichs 32 bis 126, sollten ebenfalls URL-kodiert werden.
Mit dem MIME-Typ "application/x-www-form-urlencoded" können URL-kodierte Informationen gekennzeichnet werden. Bei der Übermittlung von Web-Formularangaben mittels der POST-Methode wird beispielsweise dieser MIME-Typ als Inhaltstyp (engl. Content-Type) angegeben.
Weblinks
- RFC 1945 (Hypertext Transfer Protocol – HTTP/1.0)