Forum: PC-Programmierung Was genau ist Apache?


von Dennis Cöster (Gast)


Lesenswert?

Hi,

was ist Apache?

Apache ist ein Webserver, der auf einem Server läuft. Laut Wikipedia ist 
Apache über unterschiedliche Programmiersprachen programmierbar (PHP, 
Ruby, Python ...).

Wie genau kann ich mir Apache vorstellen? Kann ich mir das wie einen AVR 
vorstellen, der einen definierten Befehlssatz hat und dann beliebig 
programmiert werden kann (sofern Compiler vorhanden)? Beim AVR sind die 
Befehle ja Hex-Werte, die in Assembler mit Befehlen angesprochen werden 
können. Programmier ich den in C, dann werden vom Compiler aus dem 
C-Code auch Assembler-Schnippsel produziert.

In Wikipedia zu Apache steht, dass für unterschiedliche Sprachen 
Zusatzmodule geladen werden müssen. Kann ich mir diese Zusatzmodule wie 
einen Compiler vorstellen, der dann z.B. einen Java- oder Pythoncode in 
die Apache-Sprache umsetzt und dann vom Apache-Server gelesen werden 
kann, so wie ein Compiler für einen AVR den C-Code in Maschinensprache 
übersetzt?

von (prx) A. K. (prx)


Lesenswert?

Dennis Cöster schrieb:
> Wie genau kann ich mir Apache vorstellen? Kann ich mir das wie einen AVR
> vorstellen, der einen definierten Befehlssatz hat und dann beliebig
> programmiert werden kann

Die Programmierbarkeit bezieht sich auf die Art, wie Webseiten erzeugt 
werden. Vor Urzeiten waren Webseiten einfach bloss Files auf der Platte. 
Heute wird das HTML überwiegend von Programmen erzeugt. Ganz normalen 
Programmen, die Text erzeugen. Und die können in so ziemlich jeder 
Sprache geschrieben sein.

Nur die Art, wie diese Programme ausgeführt werden unterscheidet sich. 
Manche Interpreter sind als Apache-Module verfügbar, was die Ausführung 
beschleunigt, da sie dann im Prozesskontext vom Apache laufen und daher 
nicht für jeden Seitenabruf ein eigener Prozess erzeugt werden muss.

: Bearbeitet durch User
von Daniel A. (daniel-a)


Lesenswert?

Nein, du must dir das etwas weniger low-level vorstellen. Ein Server ist 
ein normaler Rechner, der nicht primär verwendet wird um auf GUIs 
rumzuklicken. Ich kenne mich mit den internals von apache nicht aus, 
aber man kann Seiten in verschiedenen Programmiersprachen auf 
verschiedene weisen realisieren. Module sind grundsätzlich einfach 
Libraries, die apache durch das OS laden lässt. Diese Libraries haben 
einige Funktionen, die apache voraussetzt, implementieren also ein 
interface. Module wie z.B. das php Modul, behandeln dann z.B. die 
Ausgabe für gewisse Dateitypen. Besonders interressant ist das CGI 
Modul. Dieses kann normle, beliebige Programme in beliebigen Sprachen 
durch das OS ausführen lassen, die HTTP Header als Environment variablen 
diesem übergeben, und die Ausgabe des Programms als Antwort auf die HTTP 
Anfrage zurücksenden. Damit kann es in gewissen fällen ein Ersatz für 
ein spezialisiertes Modul für diese Sprache sein.

von (prx) A. K. (prx)


Lesenswert?

Vereinfachtes Beispiel: Wenn dein Firefox vom Webserver eine Seite 
http://server.de/seite.xxx?p=1 anfragt, dann stellt der Apache anhand 
von xxx fest, was damit anzufangen ist. Bei .html ist es ein File auf 
Disk. Bei .php hingegen ist es ein PHP-Script. Und dieses Script führt 
der Apache dann mit seinem PHP-Modul direkt aus, mit p=1 als Parameter. 
Bei .exe ist es ein Windows-Programm, das als separater Prozess 
ausgeführt wird. Und diese Programme liefern dann den HTML Text.

: Bearbeitet durch User
von Sascha W. (sascha-w)


Lesenswert?

Dennis Cöster schrieb:
> Hi,
>
> was ist Apache?
>
> Apache ist ein Webserver, der auf einem Server läuft.
der läuft auf nahezu jedem System

> Laut Wikipedia ist
> Apache über unterschiedliche Programmiersprachen programmierbar (PHP,
> Ruby, Python ...).
programmierbar in dem Sinn von Programm schreiben ist da erst mal nichts

> Wie genau kann ich mir Apache vorstellen? Kann ich mir das wie einen AVR
> vorstellen, der einen definierten Befehlssatz hat und dann beliebig
> programmiert werden kann (sofern Compiler vorhanden)? Beim AVR sind die
> Befehle ja Hex-Werte, die in Assembler mit Befehlen angesprochen werden
> können. Programmier ich den in C, dann werden vom Compiler aus dem
> C-Code auch Assembler-Schnippsel produziert.
Apache - wie jeder ander Webserver auch stellt erst mal eine 
Netzwerkfunktionalität bereit mit der sich dann Clients verbinden 
können.
Ein Client sendet dann eine HTTP-Anfrage an den Webserver 
(Request-Header) anhand dessen der Webserver entscheidet was zu tun ist.
Das ist im einfachsten Fall einfach eine Datei (z.B. html-Text, 
jpg-Bild) die vom Datenträger gelesen wird und über die 
Netzwerkverbindung an den Client gesendet wird.

> In Wikipedia zu Apache steht, dass für unterschiedliche Sprachen
> Zusatzmodule geladen werden müssen.
Die Daten die der Client bekommt müssen nun nicht unbedingt direkt aus 
einer Datei kommen, sondern können auch im Moment der Anforderung, z.B. 
aus einer Datenbank generiert werden. Dazu kann man nahezu beliebige 
Sprachen einsetzen. Ein entspechendes Programm was mit der Sprache was 
anstellen kann wird extern benötigt und ist nicht bestandteil des 
Webservers.

> Kann ich mir diese Zusatzmodule wie
> einen Compiler vorstellen, der dann z.B. einen Java- oder Pythoncode in
> die Apache-Sprache umsetzt und dann vom Apache-Server gelesen werden
> kann, so wie ein Compiler für einen AVR den C-Code in Maschinensprache
> übersetzt?
Das Zusatzmodul stellt nur die Verbidung zwischen Webserver und der 
externen Software (z.B. PHP, Python) her welche dann das Programm 
abarbeitet und den Output für den Client erzeugt.

Sascha

von Bert3 (Gast)


Lesenswert?

"Apache" ist die Software Foundation mit vielen Projekten (u.a. auch der 
httpd) - was du meinst ist "Apache HTTP Server"

nun zu deiner Frage:

der HTTP-Server ist ein TCP/IP-Server der darauf wartet das sich Clients 
(dein Browser) auf ihn verbinden - dann sendet er Antworten im 
HTTP-Protokoll (Textprotokoll) - das wars

und gibt es eben Programme die im Server laufen können (Plugins) um 
HTML-Seiten zu erstellen - oder vieles anders - Typisch ist PHP für 
Webseiten - es kann aber auch C/C++, Assembler oder sonstwas sein - 
Hauptsache es kann Text für die Ausgabe erzeugen

hier mal der superkleine aber komplette C Sourcecode eines HTTP-Servers 
http://blog.abhijeetr.com/2010/04/very-simple-http-server-writen-in-c.html

von H. K. (spearfish)


Lesenswert?

Dennis Cöster schrieb:
> Wie genau kann ich mir Apache vorstellen? Kann ich mir das wie einen AVR
> vorstellen, der einen definierten Befehlssatz hat und dann beliebig
> programmiert werden kann (sofern Compiler vorhanden)? Beim AVR sind die
> Befehle ja Hex-Werte, die in Assembler mit Befehlen angesprochen werden
> können. Programmier ich den in C, dann werden vom Compiler aus dem
> C-Code auch Assembler-Schnippsel produziert.
>
> In Wikipedia zu Apache steht, dass für unterschiedliche Sprachen
> Zusatzmodule geladen werden müssen. Kann ich mir diese Zusatzmodule wie
> einen Compiler vorstellen, der dann z.B. einen Java- oder Pythoncode in
> die Apache-Sprache umsetzt und dann vom Apache-Server gelesen werden
> kann, so wie ein Compiler für einen AVR den C-Code in Maschinensprache
> übersetzt?

Vielleicht wird es etwas klarer, wenn du einen Schritt zurück in der 
Geschichte gehst.

Der Apache HTTP Server kann im Grunde genau eines: Einen Request gemäß 
dem Hypertext Transfer Protocol beantworten. Dieses Protokoll ist im 
Grunde nicht komplex, da es keine Sessionsverwaltung kennt und nur dazu 
dient, Daten (im einfachsten Fall HTML-Text) zu übertragen. Der Client 
fordert eine Datei an und der Server überträgt ihm diese.

Irgendwann wollte man gern statische Websiten (=Dateien) durch dynamisch 
ergänzte Inhalte erweitern. Z.b. wenn man Daten aus einer Datenbank 
auslesen, diese aufbereiten und dem User zur Verfügung stellen will. 
Also erfand man das CGI: Common Gateway Interface. Dieses Interface 
basiert auf einer einfachen Idee: Wenn der HTTP Server eine Anfrage für 
eine dynamische Website bekommt, wird vom Server ein externes Programm 
ausgeführt. Dabei biegt aber der Server den stdout-Stream von diesem 
Programm einfach zum Client um (also bei einem C-Programm in CGI siehst 
du dann sehr viele "printf("<p>Text</p>")" usw). Hier  muss der Server 
natürlich noch konfiguriert sein, damit er weiß, dass z.B. "site1.html" 
keine Datei auf der Festplatte ist, sondern eine dynamische Website und 
dazu dann z.B. das Programm "site1.exe" aufrufen soll.

Naja und mit der Zeit hat man dieses im Grunde sehr einfache CGI-Prinzip 
weiter ausgebaut, verfeinert und leistungsfähiger gemacht. Aber am 
Grundprinzip hat sich nichts geändert.
PHP ist dabei übrigens keine kompilierte Sprache, sondern eine 
Skriptsprache. Der Interpreter für den PHP-Code wäre dann das Programm, 
welches der Server per CGI aufruft.

Bin nicht auf dem neuesten Stand, aber afaik laufen die ganzen Sachen 
wie der PHP-Interpreter nicht mehr als externe Programme (dh eigene 
Tasks), sondern als Module in Apache.

von (prx) A. K. (prx)


Lesenswert?

H. K. schrieb:
> aber afaik laufen die ganzen Sachen
> wie der PHP-Interpreter nicht mehr als externe Programme (dh eigene
> Tasks), sondern als Module in Apache.

Oft. Es gibt aber auch Gründe, PHP separat auszuführen, per FastCGI.

von Heinz L. (ducttape)


Lesenswert?

Dennis, GANZ andere Baustelle als ein AVR.

Apache ist ein Programm. Grob vereinfacht liest dieses Programm in einem 
Verzeichnis auf dem Computer auf dem es läuft und zeigt den Inhalt 
anderen Computern, die sich mit dem Computer auf dem Apache läuft, über 
ein Netzwerk wie beispielsweise dem Internet verbinden, an.

Diese Inhalte kannst Du auch mittels Sprachen dynamisch generieren oder 
durch Sprachen dynamisch zusammenstellen lassen. Das kann man sich etwa 
so vorstellen, dass ein anderer Computer sich mit dem Computer, auf dem 
das Programm Apache läuft verbindet, dort einen Inhalt anfordert, und 
Apache lässt daraufhin von seinen "Unterprogrammen" diese Inhalte 
generieren, um diese dann an den anfragenden Computer zu liefern.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.