Webengineering_Roethig/Kapitel/06_URL.tex
Andre Meyering b4ab50ac3f [Inhalt] Typos; Korrekturen
Typos korrigiert und Inhalt teilweise ergänzt/korrigiert.
2017-07-30 17:36:55 +02:00

117 lines
5.7 KiB
TeX

\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[\&paraname2=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{<a href="...">} & 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{<a>} für Textanker im Dokument (auf die mit \pfad{\#ankername} gesprungen werden kann).
\html{<a name="ankername">Hierhin kann ich springen</a>} (ursprüngliche Variante) bzw.
\html{<a id="ankername">Hierhin auch</a>} (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{<a>}-Tag ist für Verwendung als Textanker heute nicht mehr notwendig! Es reicht die ID \zB eines \html{<h1>}-Tags.
\end{Hinweis}