Andreas Korthaus: Programmierung eines Proxy-Servers

Beitrag lesen

Hi!

Die Frage ist: WIE hast du den Echo-Server programmiert.

Ganz banal würde ich davon ausgehen, dass du einfach ein PHP-Skript geschrieben hast, es "echo.php" benannt und dort sozusagen "print_r($_SERVER)" reingeschrieben hast.

Nicht ganz, ich habe auf folgendem Beispiel aufgebaut: http://www.php3.de/manual/de/ref.sockets.php#sockets.examples, und erstmal nur ein paar Kleinigkeiten eingebaut(Ermittlung eigener öffentlichen IP beim Start...)

Der HTTP-Request unterscheidet sich nämlich ein kleinwenig. Statt "GET /ressource.ext HTTP/1.0" sendet der Browser jetzt "GET http://www.example.com/ressource.ext HTTP/1.0". Dadurch weiß der Proxy, welchen Server er nach der Ressource befragen muß.

Ah ja, das habe ich inzwischen auch gemerkt. Wäre auch komisch wenn es anders wäre, aber der Server funktioniert anscheinend nur wenn ich mich direkt per putty mit RAW einlogge. Sobald ich einen HTTP-Request dahin schicke wird dieser zwar ausgegeben, aber ab da ist der Server tot, liegt wohl daran dass der Server kein HTTP "spricht" und der Browser etwas verwirrt ist... ;-)

Das Problem des Echo-Servers ist nur, dass da noch ein Apache dazwischenfunkt.

nene, der läuft alleine und lauscht auf Port 10.000, das funktioniert wie gesagt für reine Echos, auch für einmalige HTTP-Requests, sehr schön, aber dann ist halt Ende. Ich muss halt anstatt "Rohdaten" auszugeben im Prinzip das ausgeben was der Server(an den ich den ehemligen Request schicke) zurückgibt. Nur was genau ändern proxies an den jeweiligen Requests? OK, aus "GET http://www.example.com/ressource.ext HTTP/1.0" muss ich GET /ressource.ext HTTP/1.0" machen, und was ist mit dem HOST-HEader? Ist das doch Sache des Clients, oder? Den Domainnamen verwende ich nur um mir über DNS die IP zu besorgen, wobei, das kann PHP ja auch automatisch bei fsockopen machen. Und wo schreiben die proxies noch so rein? Und was ist mit dem Response? Wenn ich mich recht entsinne merkt der Server nichts davon das ein Proxy dazwischen hängt, also müßte ich doch im Prinzip den empfangenen Response direkt weiterleiten. Hm, nur die Frage an wen ;-) Am einfachsten wäre es wohl ich mache alles in einem Prozess, von der Entgegennahme des Requests vom Client, über die Umschreibung und Weiterleitung des Request, das einlesen des Response und das Ausgeben dessen 1:1, so müsste es eigentlich funktionieren, schwieriger wird es nur wenn der Server verschiedene Clients unterstützen soll, mit HTTP/1.1, keep-alive und pipelining würde das wohl etwas stressig, aber ich fände es schon gut sowas auf Basis von HTTP/1.0 aufzubauen, dann müsste ich eben die komplizierten Teile bei den Requests ersetzen, die Server werden dann ja wissen was zu tun ist ;-)

Du mußt dir einen echten echo-Daemon schreiben, der auf einem Port lauscht und alles, was reinkommt, als nettes HTML verpackt wieder zurückschickt. Der sollte dann auch in der Lage sein, normale HTTP-Connections zurückzusenden.

Stimmt das mache ich mal als erstes, halt schön mit HTTP-Headern, also einen kleinen spartanischen möchtegern-webserver ;-)

Danke Dir!

Viele Grüße
Andreas