| Der Umgang mit Web-Adressen ist für die meisten Menschen in den Industrie-Ländern mittlerweile gewohnt. | Auf dieser Seite werden einige - vielleicht noch unbekannte oder nützliche - Details vorgestellt. |
HTML
|
Hypertext Markup Language |
| URL, URI, IRI | Internet-Adressen |
| Mindest-URL | Mindest-Bestandteile einer URL: scheme, host, path |
| Maximal-URL | Alle möglichen Bestandteile einer URL |
| URL-Zeichen | Erlaubte Zeichen und Codierung beliebiger Zeichen |
| IDNA | Domain-Namen mit Sonderzeichen (Umlauten) |
| Exotische URLs | Obfuscated, Non-Dotted, Numeric, ... URL-Varianten |
| Verwandte Themen |
Standards,
Webserver,
Netzwerk,
IP,
HTTP, ... URL-Analyse mit PHP |
| Links |
|
URI, URL, IRI und Internet-Adressen |
|
|
Die meist-verwendeten 'Resourcen' des Internet sind Webseiten inklusive
ihrer MultiMedia-Bestandteile. Dafür gibt es zwei ähnliche
'wissenschaftliche' Definitionen / Abkürzungen: URI, URL. Auf dieser Seite werden praktische Beispiele unter Vernachlässigung (!) der Theorie vorgestellt. Sie finden die exakten Definitionen in den unten angeführten ↓ Links. URI - Uniform Resource IdentifierDies ist die allgemeine Definition, die als Untermenge URL und URN enthält. Sie bezeichnet 'Resourcen', die man aus dem Netzwerk (Intranet, Internet) beziehen kann. Dieser Begriff hat eher theoretische Bedeutung und wird seltener verwendet.Er wurde 1994 von Tim Berners-Lee, dem 'Erfinder' von HTML, HTTP und Internet definiert. |
URL - Uniform Resource LocatorDies ist eine spezielle Definition, die vor allem auf Webseiten angewendet wird. In der Praxis für die meisten AnwenderInnen gleich-bedeutend mit 'Web-Adresse'.Wenn man die URL-Details ein wenig besser kennt, kann das u.a. zu mehr Sicherheit gegen bösartige Angreifer führen. IRI - Internationalized Resource IdentifierIst der neueste URI-Nachfolger: Damit sind auch nationale Sonderzeichen (Umlaute) in Internet-Adressen verwendbar (↓ IDNA). |
| Beispiel: Die URL dieser Webseite ist z.B. | |
Mindest-Bestandteile einer URL-Adresse |
|
Mindest-BestandteileEine URL besteht aus mindestens diesen Teilen: Eine normale URL darf nur ausgewählte → ASCII-Zeichen enthalten, keine Leerzeichen, Interpunktionen oder Sonderzeichen (z.B. Umlaute).♦ Details zu den Zeichen der URL-Codierung. |
Ein typisches Beispiel ist die URL dieser Webseite:
scheme = http
host = www.topsoft.at path = /pstrainer/entwicklung/html/url.php |
Schemebezeichnet den verwendeten Dienst.● Jede URL muss mit dem scheme (Dienst, Protokoll) beginnen. Danach muss ein : Doppelpunkt als Trennzeichen folgen. • Auch in der URI-Syntax wird der Begriff scheme verwendet. Bekannte Dienste sind z.B. http, https, ftp, mailto, file, ... |
• Die Intranet- oder Internet-Adresse einer Webseite beginnt immer mit http: • Wenn ein Browser-Programm die Anforderung einer Webseite ohne scheme erhält, dann setzt es ungefragt diesen Text (String) davor: http: Die Internet Assigned Numbers Authority ( IANA) verwaltet die offizielle Liste aller Dienste. |
Hostbezeichnet (adressiert) ein 'Gerät' - normalerweise einen Computer. Das erfolgt durch Anabe eines (Domain)-Namens oder einer IP-Adresse.Das Host-Element ist vom Scheme durch einen doppelten // Schrägstrich getrennt. Keines der anderen Elemente darf weitere // enthalten. • Bei Verwendung der Schemes http, https läuft auf dem Host-PC ein → Webserver-Programm (z.B. der Apache Webserver), welches als Partner des Browser-Programms am Client-PC (Arbeits-PC) auftritt und dessen Aufträge annimt. • Der URL-Host wird in der URI-Syntax als authority bezeichnet. Der Host-PC wird 'intern' durch eine (im jeweiligen Netzwerk) eindeutige → IP-Adresse bezeichnet. Im eigenen lokalen Netzwerk (LAN) ist das die LAN-Adresse des eigenen Server-PC, im Internet die weltweit eindeutige Internet-Adresse. |
In seltenen Fällen wird ein Host mit seiner IP-Adresse bezeichnet, z.B. mit Die IPv4-Adresse kann auch anders formatiert werden, oder es wird (derzeit noch selten) eine → IPv6-Adresse (in [] ) angegeben. ♦ Details zu URL-Varianten. • Für menschliche AnwenderInnen wird ein Host mit einem Namen (im eigenen LAN) bzw. mit einem Domain-Namen (im Internet) bezeichnet, z.B. mit • Die (Domain)-Namen sind für Menschen leichter zu merken und zu verwenden. Sie sind jedoch zur internen Adressierung ungeeignet. Ein DNS-Server ist ein Dienst, der darauf spezialisiert ist, alle von irgendeinem Browser angeforderten Namen in IP-Adressen umzuwandeln. • Bei Eingabe eines Host-Namens wird daher immer zuerst der DNS-Server (z.B. des Providers) nach der IP-Adresse befragt, erst danach kann der Auftrag (→ HTTP-Request) an den Webserver-PC gesendet werden. ♣ Viele Domain-Namen beginnen mit www - die Umkehrung ist jedoch falsch: Nicht alle Domain-Namen beginnen mit www , vielmehr können die Namen relativ frei gewählt werden. |
LAN-NamenJedes Gerät (z.B. PC) im eigenen lokalen Netzwerk (LAN) muss unter einer eindeutigen lokalen IP-Adresse erreichbar sein und kann zusätzlich einen Namen führen.Derartige Namen haben nur lokale Bedeutung im LAN, man kann sie dort jedoch genauso verwenden wie Domain-Namen im Internet. Die Verknüpfung der Namen mit den IP-Adressen erfolgt meist nicht durch einen eigenen DNS-Server sondern durch eine einfache Text-Datei, z.B. (Linux, Windows)
/etc/hosts
C:\WINDOWS\system32\drivers\etc\hosts Anwendung: z.B. http://meinserver
|
localhostEin wichtiger Standard-Name für die IP-Adresse 127.0.0.1 ist localhost ist auf jedem PC eingetragen, unabhängig vom Betriebssystem.• Damit wird stets der 'eigene' PC bezeichnet. Auf jedem Server-PC kann man daher diese URL verwenden, um die eigene Startseite zu öffnen: Das funktioniert sogar dann, wenn der jeweilige (Server)-PC gar nicht an das Netzwerk angeschlossen ist. • Wenn sie den gleichen Link auf ihrem Arbeits-PC klicken, dann funktioniert er nur dann, wenn auf ihrem eigenen PC ein Webserver läuft. |
Pfadbezeichnet den Weg zur gewünschten Resource (z.B. Webseite) innerhalb des Angebots des gewählten ↑ Hosts.• Der Pfad wird vom Host durch einen / Schrägstrich getrennt und kann selbst weitere Schrägstriche enthalten. • Im Falle von Webseiten ist path meistens identisch mit dem Datei-Pfad vom Start-Verzeichnis (DocumentRoot) des jeweiligen Webs bis zur gewünschten Webseite. • Der Pfad muss jedoch nicht mit dem Dateisystem am Server-PC übereinstimmen: Webserver verwenden meist Alias = Texte, welche einen bestimmten Pfad am Server-PC bezeichnen, der an ganz anderer Stelle liegen kann als das Start-Verzeichnis. Ein Beispiel ist das Alias cgi-bin welches von den meisten Webserver verwendet wird und immer an einer ganz anderen Stelle im Dateisystem des Webserver-PC liegt. |
● Im einfachsten Fall führt der URL-Pfad bis zur gewünschten Webseiten-Datei, z.B. In diesem Fall ist die Interpretation eindeutig: Der Auftrag des Browsers lautet, die angegebene Webseite zu senden. ● Wenn der Pfad nur ein Verzeichnis angibt, dann hängt die Reaktion des Webservers von seiner Konfiguration ab: • Normalerweise sucht der Webserver im angegebenen Verzeichnis nach einer Datei mit einem vorgegebenen Namen (meist nach index.html ). Wenn der Server eine derartige Datei findet, dann sendet er sie ungefragt. Diese Dateien enthalten allerdings oft eine Umleitung zu anderen Seiten, die so rasch erfolgt, dass man sie nicht bemerkt. • In seltenen Fällen erlaubt der Server directory-browsing, d.h. die Ansicht aller Dateien im angegebenen Verzeichnis. Download-Verzichnisse sind meist so konfiguriert. • Schließlich besteht für den Server noch die Möglichkeit, eine Fehler-Webseite zu senden - das sollte er immer dann tun, wenn erkeine Datei index.html findet. ● Als Sonderfall ist auch ein leerer Pfad erlaubt: In diesem Fall wird automatisch das Start-Verzeichnis des Webservers (DocumentRoot) verwendet. Darin befindet sich fast immer eine Datei index.html , welche der Server als 'Homepage' sendet. |
Alle Bestandteile einer URL-Adresse |
|
|
Beispiel für eine URL mit allen zugelassenen Elementen:
http://anton:geheim@demo.com:8080/test/file.php?a=12&z=34#kapitel_3
|
|
Alle vorgesehenen URL-BestandteileEine URL kann diese Elemente enthalten: (obligatorische Elemente rot) |
In der Praxis findet man nur selten derartige URLs. Elemente des Beispiels (Zeile oben):
user = anton
pass[word] = geheim host = demo.com:8080 domain=demo.com, port=8080
path = file.phpquery = a=12&z=34 Daten (2 Argumente, Parameter: a=12 und z=34
fragment = kapitel_3
|
Scheme, Host, Pathwurden ↑ bereits vorgestellt.Die Bedeutung dieser Bestandteile ist die gleiche. |
Die Reihenfolge hat sich allerdings geändert: ► Zwischen scheme und host können sich die Elemente user und pass befinden (meist beide oder keines davon). ► Der host kann optional einen Port enthalten ► Nach dem path können sich die Elemente query und / oder fragment befinden. |
User und PasswordManche Webserver sind dazu konfiguriert, für bestimmte Inhalte eine Anmeldung mit Name und Passwort zu verlangen.• Wenn man eine derartige Webseite mit einer 'einfachen' URL anfordert, dann wird ein Anmelde-Fenster geöffnet, in welches man seine Daten eintragen muss. • Wenn man diese Daten bereits zusammen mit der URL sendet, dann entfällt die manuelle Anmeldung. • Die Elemente user und pass werden optional direkt nach dem scheme eingefügt. Sie werden voneinander durch : Doppelpunkt getrennt und vom nachfolgenden host durch ein @ At-Zeichen ('Klammeraffe'). |
Diese beiden Felder werden in der Praxis selten verwendet. Man sendet nicht gerne vertrauliche Daten (mit HTTP sogar ohne Verschlüsselung) über das Internet. Innerhalb der beiden Felder sind praktisch alle Zeichen erlaubt. Man kann deshalb sehr einfach eine falsche (vertrauenswürdige) URL vortäuschen, z.B. (sehr vereinfacht):
http://www.hausbank.com:passwort-kontrolle@mafia.net
Die meisten User übersehen das @ Zeichen und halten
diese
→ Fake-URL für jene ihrer Hausbank. Tatsächlich
führt die URL jedoch zu http://mafia.net ♣ Erst nach dem @ beginnt die wirkliche Internet-Adresse ! • Moderne Browser versuchen immerhin, derartige 'Phishing'-Angriffe zu erkennen und die AnwenderInnen vor dem Anklicken eines solchen Links zu warnen. |
PortDer → Port ist eine ganze Zahl im Bereich 0..65535 , welche wie eine Sub-Adresse der Server → IP-Adresse wirkt.• Ein 'Gerät' (PC) verfügt normalerweise nur über eine einzige → IP-Adresse. • Am PC laufen jedoch typisch mehrere Programme, welche Daten über das Netzwerk austauschen, z.B. Webseiten, Mail- und RSS-Nachrichten, Chat, Internet-Radio, Video, usw. • Alle derartigen Dienste senden und empfangen Daten an der gleichen IP-Adresse. Man braucht daher eine zusätzliche Angabe (eben den Port), um die Daten an die jeweils zuständigen Dienste zu leiten. |
Der Daten-Verkehr im Netzwerk erfolgt nach dem Client-Server-Prinzip: ● Jeder Server (Auftragnehmer) wartet (lauscht, listen) an einem festgelegten Standard-Port des Server-PC auf Anweisungen. • Als Partner (Auftraggeber) können verschiedene Clients (Browser) an beliebigen Ports ihres jeweiligen PC agieren. • Webserver warten normalerweise am Standard-Port 80 auf eintreffende Aufträge. Jeder Browser setzt ungefragt und unsichtbar den Port :80 nach der Host-Adresse ein, wenn nichts anderes angeordnet wurde. ● Je nach Konfiguration kann ein (Web)-Server alternativ oder zusätzlich an einem oder mehreren anderen Ports lauschen. In diesem Fallmuss man den Port angeben: Das kann manuell erfolgen oder bereits im Link einer Webseite codiert sein. ♦ Details zu den Themen Port, Virtuelle Webserver |
QueryDieses Element bietet die Möglichkeit, Daten (Argumente, Parameter) vom Browser an den (Web)-Server zu senden.• Die Eingabe der Daten erfolgt typisch manuell in ein Formular einer Webseite, auf dem man Text-Felder, Auswahl-Listen und veschiedene Buttons unterbringen kann. Unabhängig davon gibt es eine Reihe weiterer Möglichkeiten, um Daten in ein query-Element einzutragen. • Ein Query-Element ist vom vorangehenden path durch ein ? Fragezeichen getrennt. Die einzelnen Daten werden in der Form name=wert hintereinander eingetragen und voneinander durch & getrennt. Beispiel: Fast jede an eine Internet-Suchmaschine (oder an eine andere Datenbank) gerichtete Anfrage enthält die jeweils gesuchten Daten im query Element., z.B. |
• Für Empfang und Auswertungder Daten braucht man Programme: ● 'Statische' Webseiten *.html, *.htm sind einfache Text-Dateien. Sie enthalten lediglich HTML-Quelltext (d.h. alle Anweisungen und Daten zum Aufbau einer Webseite). Solche Dateien sind normalerweise nicht in der Lage, erhaltene Daten auszuwerten. Allenfalls eintreffende query Daten werden in diesem Fall einfach ignoriert. ● Dynamische Webseiten *.php, *.pl, *.py, ... sind oder enthalten Programme in verschiedenen Programmiersprachen. Diese Server-Hilfs-Programme (CGI) werden am Server-PC ausgeführt, wo sie gegen Manipulation relativ gut abgesichert sind. Derartige Programme können query Daten lesen und sinnvoll darauf reagieren - Im Falle einer Datenbank z.B. durch Senden einer Webseite mit den Treffern der Suche. ♦ Details zur Decodierung von Argumenten mit PHP oder Javascript. |
FragmentEs gibt die Möglichkeit, mit Hyperlinks nicht nur andere Objekte (Webseiten, Grafik, ...) anzufordern, sondern alternativ zu verschiedenen Stelle der gerade geladenen Webseite zu springen. Derartige Anker-Links kann man optional als letztes Element fragment einer URL angeben.• Ein Fragment ist von allen voangestellten URL-Elementen durch ein # Hash-Zeichen getrennt. |
Auch diese Webseite enthält mehrere Anker. Man kann z.B. einen (Anker)-Link im ↑ Inhalts-Verzeichnis anklicken, um zum jeweiligen Kapitel zu gelangen, oder einen der grünen Pfeile am Beginn jedes Kapitels, um zum vorhergehenden oder zum nächsten Kapitel zu gelangen. An dieser Stelle befinden sich funktionsfähige Anker-Links zum Anfang und zum Ende dieser Webseite. |
URL-Zeichen und Codierung |
|
ZeichenEine URL darf prinzipiell nur eine Teilmenge der 127 → ASCII-Zeichen enthalten, darunter die Ziffern 0-9, die Buchstaben A-Za-z, das _ Underline-Zeichen und einige wenige weitere Zeichen.• Die ersten 32 ASCII-(Steuer)-Zeichen sind ebenso untersagt wie das Delete-Zeichen (127) und alle non-ASCII-Zeichen >=128. ♦ Details zu ASCII und Unicode. |
Das Internet muss weltweit zuverlässig funktionieren, daher können keine nationalen Sonderzeichen erlaubt werden. Die URL darf keine unzulässigen Zeichen (Leerzeichen, Interpunktionen, ...) enthalten. - Manche Browser und / oder Webserver versuchen, auch illegal formulierte URLs zu verwenden. Das kann je nach Betriebssystem, Browser und Webserver unterschiedliche Ergebnisse liefern. Je toleranter die betroffene Software damit umgeht, umso anfälliger ist sie. Das spricht für genaue Kontrolle und Null-Toleranz vor allem bei WebServern und dynamischen Webseiten. |
MaskierungEinige Zeichen haben eine besondere Bedeutung zur Codierung einer URL (Reserved Characters), insbesondere die Trennzeichen zwischen den einzelnen Elementen: $ # % & + , / : ; = ? @
Diese Zeichen dürfen in den Daten der URL-Elemente nicht vorkommen.• Damit die Verwendung auch solcher Zeichen als Daten möglich ist, werden sie 'maskiert'. Die Maskierung funktioniert wie eine Verpackung: Vor dem Absenden wird ein Zeichen verpackt (codiert), nach dem Empfang ausgepackt (decodiert). ● Ein maskiertes Zeichen beginnt immer mit dem % Prozent-Zeichen, gefolgt von seinem 2-stelligen hexadezimalen → ASCII-Code. Beispiel:
+ (ASCII hexadezimal 2B) wird zu %2B
Zusätzlich sollte man eine Reihe weiterer missverständlicher Zeichen vermeiden (=maskieren), (Unsafe Characters) z.B. Interpunktionen, Klammern und Leerzeichen: " ' ( ) < > [ \ ] ^ ` { | }
• Unbedingt zu vermeiden (nicht zu codieren) sind alle Unicode-Zeichen U>007E , darunter z.B. die deutschen Umlaute ÄÖÜ äöü ß oder das € Zeichen. |
► Alle der ca. 2 Mio 'druckbaren' → Unicode Zeichen lassen sich mit 'doppelter Maskierung' im query Element verwenden, darunter auch alle Interpunktionen, die deutschen Umlaute und das € Zeichen. Nach der korrekten Codierung sind die URI-Zeichen-Regeln auch für diese Zeichen streng erfüllt. Beispiel: Das griechische α alpha (hexadezimaler Unicode U+03B1) wird zuerst → HTML-codiert zu
α oder α
und enthält in dieser Form nur mehr ASCII-Zeichen.Die unzulässigen URL-Zeichen werden anschließend URL-codiert:
%26alpha%3B oder %26x3B1%3B
● Ein Sonderfall ist das Leerzeichen (space, blank): Es darf (nur) im query Element als + oder URL-codiert als %20 vorkommen, z.B. Mein+Name%20ist+Hase
• Prinzipiell darf man jedes Zeichen mit Ausnahme der meisten URL-Trennzeichen URL-codieren. Diese Möglichkeit wird von Angreifern oft verwendet, um die wahre Adresse einer Fake-URL zu verschleiern. Beispiel: Beide folgenden URLs sind identisch:
http://hacker.de
♦ Details zu exotischen
Varianten der URL-Formatierung
http://%68%61%63%6B%65%72%2E%%64%65 |
IDNA
Internationalizing Domain Names in Applications
|
|
|
Eine relativ neue Erweiterung des Standards für Domain-Namen erlaubt
auch die Verwendung nationaler Sonderzeichen in den Namen. ● Seit 2004 ist es z.B. erlaubt, in einigen Domains (.at, .de, .ch, .li) Umlaute zu verwenden. Das war nicht notwendig, aber für einige Unternehmen aus Marketing-Gründen erwünscht. |
●
In Asien war diese Erweiterung durchaus sinnvoll: Dort werden wesentlich mehr
non-ASCII-Zeichen von sehr vielen Menschen verwendet, und Englisch-Kenntnisse
sind nicht so verbreitet wie in Europa. IDNA kann in diesem Fall helfen, soziale Schranken zu überwinden und den Zugang zum Internet zu erleichtern. |
URL-Regelnwerden auch mit IDNA streng beachtet, d.h. die Sonderzeichen werden nicht übertragen und sollten keinesfalls zum Webserver gelangen.Browser-CodierungWenn in einem IDNA-Namen nationale Sonderzeichen enthalten sind, dann muss sie der Browser in einem 2-stufigen Verfahren (Nameprep, Punycode) codieren. Erst danach darf er die Anforderung (HTTP-Request) absenden.Die zwischen HTTP-Client (Browser) und HTTP-(Web)-Server ausgetauschten URLs enthalten die Sonderzeichen in codierter Form und verwenden daher weiterhin nur die zulässigen URI-Zeichen. |
Nationale IDNA-RegelnIDNA-Domain Namen funktionieren daher nur dann, wenn sie vom jeweiligen Browser (!) korrekt codiert werden. Auf Server-Seite sind keine Änderungen notwendig.Leider sind die Regeln zur IDNA-Codierung lediglich national standardisiert. In Deutschland, Österreich und der Schweiz gelten je nach der verwendeten Top-Level-Domain unterschiedliche Regeln ! IDNA Domain Namen eignen sich eher für Webs mit sehr lokaler Bedeutung. Wenn es nicht unbedingt notwendig erscheint, sollte man zumindest in Europa vorläufig darauf verzichten... |
|
|
URIs & URLs,
HTTP,
|
Wikipedia:
URI,
URL,
DNS,
IDNA,
Umlautdomain,
Nameprep,
Punycode,
|
IETF - Standards:
RFC1630 (1994),
RFC1736 (1995),
RFC1808 (1995),
RFC2396 (1998),
RFC2718 (1999),
RFC2732 (1999),
RFC3305 (2002),
RFC3490 (+3491+3492 - 2003 IDNA),
RFC3986 (URI 2005),
RFC3987 (IRI 2005), ...
- Neuere Definitionen ersetzen alte.
|
Apache.org: URI Syntax
|
|
Letzte Änderung dieser Seite: 2011-12-01 08:14:49
|