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?
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.
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.
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.
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
"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
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.
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.
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.