| |
3.3 Verarbeitung von Anfragen
In diesem Abschnitt wird auf die Verarbeitung von HTTP-Anfragen durch den
Apache Webserver eingegangen. Der Apache Webserver verarbeitet solche An-
fragen stets nach dem gleichen Prinzip. Eine Anfrage, die auf einer Adresse
und einem Port ankommt, auf der der Apache Server horcht, wird in mehreren
Phasen abgearbeitet. Diese Phasen sind die folgenden:
1. URI to Filename translation
(
Übersetzung des URI in einen Dateinamen.)
2. Auth ID checking
(
Überprüfung ob der Nutzer derjenige ist, der er zu sein vorgibt.)
3. Auth access checking
(
Überprüfung ob der Benutzer die erforderlichen Zugri srechte hat.)
4. Access checking other than auth
(Prüfung von Zugri srechten durch andere Verfahren)
5. Determining the MIME type of the object requested
(MIME-Typ bestimmen)
6. Fixups
(Für Erweiterungen vorgesehen, die schlecht in andere Phasen passen)
7. Acutally sending a response back to the client
(Eine Antwort an den Client schicken)
8. Logging the request
(Protokollierung der Anfrage)
Jede der Phasen wird bearbeitet, indem die Apache Module nacheinander in
einer festen Reihenfolge durchgegangen werden. Dabei schaut Apache jedesmal
nach, ob das Modul für die entsprechende Phase einen Handler hat.
Hat ein Modul einen Handler, dann gibt es drei Möglichkeiten. Der Handler
kann die Anfrage handeln (OK zurückgeben), er kann sie ablehnen (DECLINE
zurückgeben), was den gleichen E ekt hat, als gäbe es keinen Handler oder
einen Fehler ausgeben, was die Bearbeitung der gesamten Anfrage unter mögli-
cher Erzeugung einer Fehlerseite abbricht. Auch nach einem Abbruch wird die
Loging Phase durchlaufen und der Fehler entsprechend protokolliert. Die Pha-
sen werden in der Regel durch den ersten Handler beendet, der die Anfrage
bearbeitet.
Aus programmiertechnischer Sicht sind Handler Funktionen eines Moduls. Sie
erwarten als Parameter einen Pointer auf eine request rec struct (siehe An-
hang D für eine verkürzte Definition, die die am häufigsten genutzen Felder
enthält) und sie liefern einen Integer zurück (OK, DECLINE oder einen HTTP-
Status-Code).
Ein Handler könnte z.B. so aussehen:
7
|  |
|
| |
|
|