\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