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.
:
Bearbeitet durch User
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.
:
Bearbeitet durch User
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.