\documentclass[12pt]{beamer} \usepackage{amsmath} \usepackage{url} \usepackage{ucs} \usepackage[utf8]{inputenc} \usepackage[ngerman]{babel} \newcommand{\ui} [1]{\color{blue!50!black}#1\color{black}} \newcommand{\imp}[1]{\color{red!50!black}#1\color{black}} \title{Hypertext Transfer Protocol} \author{Ingo Blechschmidt \\\texttt{<iblech@web.de>}} \institute{LUGA} \date{6. Juli 2005} \usetheme{Warsaw} \usecolortheme{seahorse} \setbeamercovered{transparent} \begin{document} \frame{\titlepage} \frame[t]{ \frametitle{Inhalt} \tableofcontents } \section{Allgemeines} \subsection{Geschichte} \frame[t]{ \frametitle{Geschichte} \begin{itemize} \item Erster RFC für HTTP/1.0: RFC 1945, Mai 1996 \item Erster RFC für HTTP/1.1: RFC 2616, Juni 1999 \item Viele weitere RFC bis jetzt \end{itemize} } \subsection{Verwendung von HTTP} \frame[t]{ \frametitle{Verwendung von HTTP} \begin{itemize} \item World Wide Web (inkl. Web Services) \item Aufbauend: \\ WebDAV (WWW Distributed Authoring and Versioning), \\ Subversion (Versionskontrollsystem) \item Ähnlich: SIP (Session Initiation Protocol) u.a. für VoIP \end{itemize} } \section{Protokollbeschreibung} \subsection{Typischer Ablauf} \frame[t]{ \frametitle{Typischer Ablauf} \begin{itemize} \item Wunsch: \texttt{http://www.pro-linux.de/berichte/} \item Also Verbindung zu \texttt{www.pro-linux.de:80} per TCP: \pause\texttt{\footnotesize% \ui{GET /berichte/ HTTP/1.1\\ Host: www.pro-linux.de\\ Connection: close\\ \ \\}\pause HTTP/1.1 200 OK\\ Date: Mon, 04 Jul 2005 18:17:33 GMT\\ Server: Apache\\ Last-Modified: Sun, 10 Apr 2005 21:20:54 GMT\\ Content-Length: 10883\\ Content-Type: text/html\\ \ \\\pause <!DOCTYPE html\textit{[...]} } \end{itemize} } \subsection{Request-Methoden} \frame[t]{ \frametitle{Request-Methoden} \begin{itemize} \item Request-Methode als erste Zeile des Requests \item Generell: \texttt{\textit{Methode} \textit{Pfad} HTTP/\textit{1.1}} \end{itemize} \vfill \begin{block}{Verfügbare Methoden} \begin{tabbing} \texttt{CONNECT}: \= \kill \texttt{GET}: \> Normales Herunterladen einer Seite \\ \texttt{HEAD}: \> "`Ich möchte bitte nur die Header."' \\ \texttt{POST}: \> Schicken von Daten an den Server (z.B. Formulare) \\ \texttt{TRACE}: \> Zurücksenden des gesamten Requests (Debugging!) \\ \texttt{CONNECT}: \> Direkte Weiterleitung auf TCP-Ebene \\ \> (SSL, Proxyketten) \end{tabbing} \end{block} } \subsection{Header-Felder} \frame[t]{ \frametitle{Header-Felder} \begin{itemize} \item Format ähnlich wie bei RFC 822-konformen Mails \item Header beginnend mit \texttt{X-}: nicht standardisiert \end{itemize} \begin{block}{Oft verwendete Header} \vspace*{-0.5em} \begin{tabbing} \texttt{Content-Length}: \= \kill \texttt{Host}: \> Direkte Adressierung (Virtual Hosts!) \\ \texttt{Date}: \> Datum der Antwort \\ \> (nützlich für z.B. Zeitsynchronisation) \\ \texttt{Last-Modified}: \> Datum der letzten Änderung \\ \pause \texttt{Server}: \> Server-Software (z.B. Apache) \\ \texttt{User-Agent}: \> Client-Software (z.B. Lynx, ELinks) \\ \pause \texttt{Content-Length}: \> Länge in Bytes des Antwort-Dokuments \\ \texttt{Content-Type}: \> MIME-Typ des Antwort-Dokuments \\ \> (z.B. \texttt{text/html}, \texttt{application/xml}) \end{tabbing} \end{block} } \subsection{Keep-Alive} \frame[t]{ \frametitle{Keep-Alive} \begin{itemize} \item Früher, bei HTTP/1.0: \\ Eine TCP-Verbindung für jeden Request \item Nachteil: Ständiges Öffnen und Schließen von TCP-Verbindungen ineffizient \item Daher, seit HTTP/1.1: \\ Keep-Alive -- Offenhalten der Verbindungen \item Neuer Header: \texttt{Connection: close} \end{itemize} } \section{Proxyketten} \subsection{Nutzen von Proxies} \frame[t]{ \frametitle{Nutzen von Proxies} \begin{itemize} \item Üblicherweise: Client ↔ Server \item Mit Proxies: Client ↔ Proxy ↔ Server \vfill \item Traffic- und Zeiteinsparungen (Cache!) \item Möglichkeit der detaillierten Zugangsbeschränkung \item Ausfiltern von invaliden und möglicherweise die Sicherheit kompromittierenden HTTP-Requests \item (Aber: Möglicherweise Sicherheitslücken auch in den Proxy-Daemonen) \item U.U. Erhöhung der Anonymität \end{itemize} } \subsection{Proxies bei HTTP} \frame[t]{ \frametitle{Proxies bei HTTP} \texttt{% \ui{GET }\imp{http://www.pro-linux.de}\ui{/ HTTP/1.1\\ Host: www.pro-linux.de\\ \ \\} HTTP/1.1 200 OK\\ \textit{[...]} } \vfill\begin{itemize} \item Kurz: Statt dem Pfad die vollständige URL im Request \item Andere Header wie üblich \item Übliche Header-Ergänzungen durch Proxies: \\ \texttt{Via}, \texttt{X-Forwarded-For} \end{itemize} } \subsection{\texttt{CONNECT}-Methode} \frame[t]{ \frametitle{\texttt{CONNECT}-Methode} \texttt{\footnotesize% \ui{CONNECT \only<1-3>{www.pro-linux.de:80}\only<4->{proxy\only<5->{1}:3128} HTTP/1.1\\ Host: \only<1-3>{www.pro-linux.de}\only<4->{proxy\only<5->{1}:3128}\\ \ \\}\pause HTTP/1.1 200 Connection established\\ \ \\ \only<5->{\imp{CONNECT proxy2:3128 HTTP/1.1\\Host: proxy2:3128\\\ \\}HTTP/1.1 200 Connection established\\\ \\} \ui{GET \only<4->{http://www.pro-linux.de}/ HTTP/1.1\\ Host: www.pro-linux.de\\ \ \\}\pause HTTP/1.1 200 OK\\ \textit{[...]} } } \subsection{Proof-of-Concept-Implementierung} \frame[t]{ \frametitle{Funktioniert das denn wirklich?} \begin{itemize} \item Ja. :) \item \texttt{% \$ \ui{./proxychain --listen=8000 -- \textbackslash\\ \ \ proxy1:3128 proxy2:3128 \textit{[...]}}} \item Im Browser: Setzen der Proxy auf \texttt{localhost:8000} \item \texttt{http://whatismyip.com/}, \texttt{http://www.augustakom.de/speedtest/} \pause \item Meistens sogar Schleifen möglich: \\ \texttt{% \$ \ui{./proxychain --listen=8000 -- \textbackslash\\ \ \ p1:3128 p2:3128 p3:3128 p1:3128 \textit{[...]}}} \end{itemize} } \section{Siehe auch} \frame[t]{ \frametitle{Siehe auch} \begin{itemize} \item RFC 1945: Hypertext Transfer Protocol -- HTTP/1.0 \item RFC 2616: Hypertext Transfer Protocol -- HTTP/1.1 \item \url{http://freshmeat.net/projects/theguide/}: \\ Hitchhiker's Guide to the Internet \item {\url{http://m19s28.vlinux.de/iblech/proxychain-luga-20050706.pl}}: \\ Proof-of-Concept-Implementierung \end{itemize} \vfill\begin{center}\Large Fragen?\end{center} } \end{document}
Download