Andreas Korthaus: Programmierung eines Proxy-Servers

Beitrag lesen

Hi!

Ein Proxy mag die Problematik aber durchaus abmildern, weil der echt eigene Verbindungen ins Netz aufbaut.

Mal wieder ein kleines OT ;-)

Hatte mich immer schonmal interessiert, ich weiß eigentlich auch was ein Proxy macht(bzw. dachte ich es immer zu wissen), nur irgendwie bekomme ich nicht wirklich heraus wie das praktisch funktioniert. Was macht ein HTTP-Proxy denn genau? Er arbeitet doch wie ein HTTP-Server, lauscht also an irgendeinem Port, aber was macht er wenn er einen Request bekommt? Ich hätte jetzt mal einfach gedacht, man gibt halt die IP-Adresse + Port des Proxis in den Einstellungen der Clientsoftware an(z.B. Browser), dann öffnet man ganz normal irgendeine Internetseite, nur anstatt den Hostnamen aufzulösen... wird der Request vom Client komplett so wie er ist(?) an den Proxy geschickt, dieser holt sich dann den Hostnamen aus dem HTTP-Header, guckt in seinen Cache oder holt sich sonst den Inhalt ganz einfach als wäre er der Client und schickt die Ausgabe mit eigenen Headern dann an den eigentlichen Client zurück. Aber ganz so einfach scheint es nicht zu funktionieren. Ich habe es einfach mal mit einem Echo-Server probiert, den ich mir mal in PHP geschrieben hatte. Das funktioniert prima, damit kann ich z.B. den HTTP-Request des Browsers schön auslesen, aber nur wenn ich direkt einen Request an diesen Server schicke. Dann dachte ich ich weise diese Echo-Server-Adresse mal einfach als Proxy zu, aber das scheint nicht zu funktionieren, es passiert einfach nichts. Ich habe mir mal den TCP-Traffic angesehen, da gehen dann zwar ein paar SYN-ACK Pakete zwischen "Proxy-Server" und Client hin und her, aber nichts mit HTTP, ich würde doch zumindest erwarten dass der Client seinen HTTP-Request sendet, das macht er aber nicht - und da weiß ich jetzt nicht wieso. Dass da keine Mißverständnisse aufkommen, es ist bisher ein reiner TCP-Echo-Server der nur das ausgibt was er empfängt, aber ich dachte das würde vielleicht reichen um den ersten Schritt eines Proxies zu simulieren(so wie es für einen Websever auch klappt, halt das empfangen eines HTTP-Request), aber es klappt überhaupt nichts. Und ich weiß auch das PHP nicht die Programmiersprache der Stunde ist wenn es darum geht solche Software zu programmieren, aber mir geht es ja auch nur um das Verstehen, weniger um irgendwas produktives ;-)
Wo liegt denn jetzt mein Verständnisproblem bzgl. der Funktionsweise eines Proxies?

Grüße
Andreas