Http Eot

Chefkoch333

Erfahrenes Mitglied
Hi Forum,
ich schreibe gerade ein "Proxy" Programm. Dabei gibt es eine Client und eine Server Komponente. Der Client dient lokal als Proxy. Dieser nimmt Anfragen entgegen wrapped diese in ein anderes Protokol und schickt dieses Paket an den Server. Der Server kommuniziert dann mit dem eigentlichen Ziel Host und liefert die Antwort wiederrum an den Client zurück.

Request:
Browser -> ProxyClient -> ProxyServer -> TargetHost
Protocol: HTTP -> ProxyProtocol -> HTTP

Response:
TargetHost -> ProxyServer -> ProxyClient -> Browser
Protocol: HTTP -> ProxyProtocol -> HTTP

Das HTTP wird als ByteArray gewrapped. Ziel sollte sein das die Kommunikation über den Proxy für Browser und TargetHost total transparent ist.

Soweit die Theorie. Dies funktioniert soweit auch schon, bis auf den letzten Schritt der Kommunikation der Antwort vom ProxyClient -> Browser.
Die HTTP-Antwort liegt im ProxyClient vollständig als ByteArray vor. Wenn ich diese aber an den Browser über den Socket-OutputStream schicke kommt scheinbar nur ca. 2/3 der Antwort im Browser an.
Natürlich Flushe ich den Stream das nützt allerdings nichts.
Es sieht so aus als würde der Browser auf irgentwas warten, obwohl ja eigentlich alles vollständig übertragen wurde. Gibt es beim HTTP ein EOT flag o.ä.?

Ich verstehe nicht was das Problem ist...
 
Hi,
also ich habe ein wenig weiter getestet und es scheint nicht am Stream zu liegen.
Ich habe den Response in eine Datei gespeichert und in einer simplen Testklasse daraus den Browser bedient. Das hat ohne Probleme funktioniert.

Ausserdem testete ich mit der relativ komplexen Seite von spiegel.de. Simple Seiten funktionieren wie ich jetzt herausgefunden habe ohne Probleme.
Ich glaube daher das mein Problem eher am Thread Management liegt und das es zu einem Deadlock kommt. Evlt. versucht spiegel.de weitere Inhalte zu laden, was aber nicht funktioniert da mein Programm zZt. noch keine Vollduplex Kommunikation unterstützt, und neue Anfragen erst nach einer vollständigen Übermittlung der Antwort wieder entgegen nimmt.
Das ist bisher nur eine Idee, muss da mal noch weiter testen...

Aber wie gesagt kann ich den Socket Stream wohl erstmal als Fehler ausschließen.
 

Neue Beiträge

Zurück