praetor: Transfer-Encoding 'identity'

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

  1. 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

    1. 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

      1. 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