\chapter{URLs und URIs}\label{sec:url_uri}\index{URL} \acfp{URL} sind eine Teilmenge der \acfp{URI}. \begin{description} \item[\acs{URL}] Die Adresse einer Ressource (mit allen relevanten Informationen). \newline Beispiel für URL (und damit auch für URI): \pfad{http://www.dhbw-karlsruhe.de/} \item[\acs{URI}] Gibt Informationen, wie eine Ressource erreicht werden kann. \newline Beispiel für URI (aber nicht für eine URL): \pfad{mailto:xyz@dhbw-karlsruhe.de} \end{description} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{\acl{URI} (URI)}\index{URI} Allgemeines Format einer URI: \code{schema:info} Beispiele für \code{schema}: \begin{itemize}[noitemsep] \item \code{mailto} Info ist die E-Mail Adresse \item \code{news} Info ist die Newsgroup (und evtl. Artikel-ID) \item \code{http} Info ist Rest der Adresse \end{itemize} Falls \code{schema} = Anwendungsprotokoll $\Rightarrow$ URI ist eine URL. \section{\acl{URL} (URL)} Format einer \acs{URL}:\newline \code{protocol://[uid[:pw]@]host[:port]/[directory/][resource][?parameter][\#anchor]} \begin{description} \item[\code{protocol}] Das Anwendungsprotokoll der Anwendung, \zB http, https, ftp) \item[\code{uid}] User-ID, Benutzername (für zugriffsbeschränkte Ressourcen) \item[\code{pw}] Passwort (in Browsern aus Sicherheitsgründen meist nicht implementiert) \item[\code{host}] Name (\acs{FQDN}) oder IP-Adresse des Webservers. \item[\code{port}] Portnummer (positive ganze Zahl).\newline Falls nicht angegeben, so ist der Default-Port abhängig vom verwendeten Protokoll (\zB HTTP auf Port 80, HTTPS auf Port 443) \item[\code{/}] Der abschließende Schrägstrich (könnte auch als Pfad zur Ressource interpretiert werden). \item[directory] Verzeichnis. Falls nicht angegeben $\Rightarrow$ Wurzelverzeichnis (\enquote{root directory}). \item[resource] Name der Ressource im jeweiligen Verzeichnis (meist bestehend aus Name und File-Extension). Falls nichts angegeben wird, so entscheidet der Webserver über die auszuliefernde Ressource (\zB eine Default-Datei \pfad{index.html}, eine Verzeichnisauflistung oder eine Fehlermeldung). \item[\code{parameter}] Liste von \code{GET}-Parametern in der Form\newline \code{parametername=parameterwert[\¶name2=parawert2[\&\ldots]]} (potentiell beliebig viele Parameter, beschränkt durch max. Länge aus URL\footnote{siehe \url{http://stackoverflow.com/questions/417142/what-is-the-maximum-length-of-a-url-in-different-browsers}}). \item[\code{anchor}] Anker: Textstelle, zu welcher der Browser direkt springt.\newline \end{description} \begin{Achtung} Der Anker (\code{\#xyz}) wird beim Request nicht an den Server mitgeschickt! \code{anchor} wird lokal im Browser ausgewertet, \zB durch JavaScript. PHP, welches serverseitig arbeitet, kann dies nicht auswerten. \end{Achtung} \subsection{Relative URLs}\label{sec:relative_url} Es können auch relative \acsp{URL} angegeben werden, die jedoch mithilfe der vollständigen \acs{URL} des enthaltenden Dokuments ebenfalls zu einer vollständigen (absoluten) \acs{URL} gemacht werden! Es wird zwischen folgenden relativen URLs unterschieden: \begin{description} \item[Protokoll-relative URL] beginnt mit \pfad{//...}, \pfad{host/...} (\zB HTTPS)\index{URL!Protokoll-relativ} \item[Host-relative] (Pfad-absolute) URL: beginnt mit \pfad{/pfad...} (\zB Verweis auf zentrale Dokumente auf demselben Server wie das Impressum oder die Einstiegsseite)\index{URL!Host-relativ}\index{URL!Pfad-absolut} \item[Pfad-relative URL] beginnt mit \pfad{pfad} (ohne Schrägstrich am Anfang; Verweis auf logisch zusammenhängende Ressourcen im selben Verzeichnis oder Unter-/Oberverzeichnis)\index{URL!Pfad-relativ} \end{description} Vorteile von relativen URLs: \begin{itemize}[noitemsep] \item (meist) kürzer \item \enquote{Umzugsfähigkeit} der Web-Präsenz\ldots \begin{itemize}[noitemsep] \item \ldots auf einen anderen Server (Host-relativ) \item \ldots in ein anderes Verzeichnis (Pfad-relativ) \end{itemize} \end{itemize} Anwendung von vollständigen (Host-absoluten) URLs \begin{itemize}[noitemsep] \item Verweis auf eine andere Web-Präsenz \item Verweis auf den eigenen Server mit anderem Protokoll (HTTP $\Leftrightarrow$ HTTPS $\Leftrightarrow$ FTP) \end{itemize} \newpage Spezielle Verzeichnisnamen, welche speziell bei relativen \acsp{URL} wichtig sind: \begin{description}[noitemsep] \item[\pfad{..}] das übergeordnete Verzeichnis (im Falle des Wurzelverzeichnisses wiederum das Wurzelverzeichnis). \item[\pfad{.}] das aktuelle Verzeichnis \end{description} \textbf{Beispiel}: URL des Dokuments \pfad{http://a.b/c/d/e/f.bla} \begin{tabular}{lll} URL in \html{} & ergibt & \\ \pfad{//a.b/z/x} & $\Rightarrow$ \pfad{http://a.b/z/x} & \\ \pfad{/} & $\Rightarrow$ \pfad{http://a.b/} & Einstiegsseite des Servers \\ \pfad{./} & $\Rightarrow$ \pfad{http://a.b/c/d/e/} & Default-Dokument im aktuellen Verzeichnis \\ \pfad{../.././../bla/fasel/././../da} & $\Rightarrow$ \pfad{http://a.b/bla/da} & \end{tabular} \subsection{Anker} \html{} für Textanker im Dokument (auf die mit \pfad{\#ankername} gesprungen werden kann). \html{Hierhin kann ich springen} (ursprüngliche Variante) bzw. \html{Hierhin auch} (neuere/spätere Variante) \begin{Hinweis} \code{id} ist ein \enquote{Universalattribut} und kann mit (fast) jedem Tag verwendet werden. Der Tag wird dann über \pfad{\#ankername} ebenfalls direkt anspringbar! $\Rightarrow$ Das \html{}-Tag ist für Verwendung als Textanker heute nicht mehr notwendig! Es reicht die ID \zB eines \html{

}-Tags. \end{Hinweis}