Transfer-Encoding 'identity'
praetor
- https
0 Axel Richter0 praetor
Hallo an alle!
Ich habe ein Problem, daß ich nicht verstehe. Ich will mir einen kleinen Web-Agenten bauen und experimentiere mit lwp-request (unter Linux, Debian testing). Das funktionert auch wunderbar. Wenn ich den Aufruf aber über einen Proxy-Server laufen lasse, verweigern manche Server den Dienst:
praetor@debian:~$ lwp-request -p http://127.0.0.1:8118 http://www.google.de
500 Chunked must be last Transfer-Encoding 'identity'
praetor@debian:~$
Andere funktionieren. Der Proxy ist eigentlich in Ordnung. Die Webbrowser laufen auch über ihn und machen keinerlei Probleme. Meine Verdacht ist, daß es damit zusammenhängt, daß der Proxy kein ganz gewöhnlicher Proxy ist, sondern einer, der die Kommunikation anonymisiert und die IP irgendwie versteckt, genauer gesagt tor 0.1.0.15-1 und privoxy 3.0.3-4. Anscheinend findet zwischen Server und Brower noch irgendeine Kommunikation stattfindet, die lwp-request nicht kann. Ich habe mal tcpdump mitlaufen lassen. Da findet nur Kommunikation mit Dritten wie havard.edu oder sharktooth.de statt, nie direkt mit der aufgerufenen Seite. Ich habe auch keiner Ahnung, von welchem Server die Fehlermeldung eigentlich kommt. Google hat eine Menge seiten ausgeworfen, bei denen es um das HTTP-Protokoll geht. Aber die verstehe ich ehrlich gesagt nicht. Gibt es einen gangbaren Weg, lwp-request doch noch zum Seitenabruf zu bewegen?
Gruß
praetor
Hallo,
praetor@debian:~$ lwp-request -p http://127.0.0.1:8118 http://www.google.de
500 Chunked must be last Transfer-Encoding 'identity'
praetor@debian:~$
Das 'identity' sieht so aus, als ob der Proxy als Standard
Transfer-Encoding: identity
setzt.
Das widerspricht aber http://www.apps.ietf.org/rfc/rfc2616.html#sec-14.41 -> http://www.apps.ietf.org/rfc/rfc2616.html#sec-3.6
Whenever a transfer-coding is applied to a message-body, the set of transfer-codings MUST include "chunked", unless the message is terminated by closing the connection. When the "chunked" transfer- coding is used, it MUST be the last transfer-coding applied to the message-body.
Das sagt auch die Fehlermeldung.
Google liefert, wenn man gzip im Request ausschließt:
Transfer-Encoding: chunked
Das scheint Dein Proxy zu
Transfer-Encoding: identity
umzuwandeln. Richtig wäre aber gar kein Transfer-Encoding Header oder wenigstens:
Transfer-Encoding: identity, chunked
Andere funktionieren.
Interessant wäre, wen Du mal ein funktionierendes Beispiel postest.
viele Grüße
Axel
Hallo Axel,
herzlichen Dank für Deine detaillierte Antwort. Ich habe sie noch nicht ganz verstanden, werde mich aber "reinknieen".
Vorab:
Andere funktionieren.
Interessant wäre, wen Du mal ein funktionierendes Beispiel postest.
praetor@debian:~$ lwp-request -sd -p http://127.0.0.1:8118 http://www.spiegel.de
200 OK
praetor@debian:~$
gruß
praetor
Hallo,
Andere funktionieren.
Interessant wäre, wen Du mal ein funktionierendes Beispiel postest.
praetor@debian:~$ lwp-request -sd -p http://127.0.0.1:8118 http://www.spiegel.de
200 OK
praetor@debian:~$
Ja, wie ich vermutete, sobald der Proxy stellvertretend einen Response eines Servers ausliefert, der selbst den Response-Header
Transfer-Encoding
mitliefert, dann kommt bei lwp-request hierfür etwas an, was diesen zur Meldung
500 Chunked must be last Transfer-Encoding 'identity'
veranlasst.
Ein
GET / HTTP/1.1[CRLF]
Host: www.google.de[CRLF]
bringt
HTTP Status Code: HTTP/1.1 200 OK
...
Transfer-Encoding: chunked CRLF
...
Ein
GET / HTTP/1.1[CRLF]
Host: www.spiegel.de[CRLF]
bringt kein Transfer-Encoding.
Offensichtlich macht also der Proxy etwas bei der Behandlung dieses Response-Headers falsch.
viele Grüße
Axel