Sven Rautenberg: "403 Forbidden" bei fsockopen() + fputs(GET / HTTP/1.0)

Beitrag lesen

Moin!

Was mir noch auffällt: Du sendest keine "Host:"-Angabe an den Proxy. Damit kann es passieren, dass der Proxy auch keine an den Server sendet (wenngleich er diese aus der URL-Angabe konstruieren könnte), und VirtualHosts haben dann schon mal so ihre Probleme damit.

DAS verstehe ich nun nicht so ganz. Wo bzw. wie soll ich denn dem Proxy einen Host übergeben???

Schau mal bei Gelegenheit etwas genauer in den HTTP-Standard. Schließlich sprichst du mit deinem Proxy HTTP, oder (ohne Proxy) direkt mit Servern. Also wäre es gut, wenn du korrektes HTTP mit den Servern sprichst.

Zentraler Bestandteil der aktuellen Standards ist, dass du jedem Server (Situation ohne Proxy) nicht nur dein "GET _url-Wert_ HTTP/1.0" sagst, sondern in der nächsten Zeile noch mitteilst, welcher der möglicherweise vorhandenen virtuellen Hosts denn gemeint ist:

Als Text (den du mit fputs() senden mußt:
-----schnipp-----
GET / HTTP/1.0
Host: www.example.com

-----schnapp-----

Der Ende dieses Requests liegt vor, wenn zweimal Leerzeilen gesendet wurden ("\r\n\r\n").

Nur auf diese Weise kannst du sicher sein, wirklich mit dem richtigen Server zu sprechen. Natürlich hat eigentlich jeder Server eine URL "/" - wenn du die testest, und auf dem Server sind mehrere virtuelle Hosts, und du gibst keinen Host im Request an, dann wird der standard-virtuelle Host genommen. Das ist u.U. eine ganz andere Website, als die, die du abfragen willst.

Weil jedermann den Domainnamen in eine IP auflösen kann, und dann statt der Domain diese IP-Adresse verwenden kann, um den Server mal zu befragen, dabei dann mit dem standard-virtuellen Host verbunden wird - könnte man auf diese Weise herausfinden, wer sich denn noch so auf dem Server befindet. Deshalb wird dieser standard-virtuelle Server von Hostern gerne leergelassen bzw. eben mit 403 forbidden abgeschlossen. Als Zeichen, dass man irgendwas versucht hat, was nicht definiert ist.

Und genau das paßt gut auf deine Beschreibung, was schiefläuft. Deshalb: Teste mal in einem Browser, was der fragliche 403-Server sagt, wenn du ihn nicht mit Namen, sondern mit IP aufrufst.

- Sven Rautenberg

--
"Beim Stuff für's Web gibts kein Material, was sonst das Zeugs ist, aus dem die Sachen sind."
(fastix®, 13. Oktober 2003, 02:26 Uhr -> </archiv/2003/10/60137/#m338340>)