Harald: HTTP POST bei älteren Browsern

ich untersuche gerade die Anfragen von Browsern für eine Steuerung.

Normalerweise bekomme ich beim POST

........ so etwas
Content-Type: application/x-www-form-urlencoded
Content-Length: 78

und hier die Daten

das klappt ganz gut
Beim Test verschiedener Browser klappt das aber nicht bei allen Browsern.
z.B. mit dem Uralt
Netscape/7.02
oder dem Mozilla/5.0
kommt weder der Content-Type, noch die Content-Length noch die Daten.

Auch mit einem öffentlichen Proxy klappt es nicht
Der Proxy-Test meldet einen Fehler
"    Read Error

The system returned: (104) Connection reset by peer

An error condition occurred while reading data from the network. Please retry your request."

Was machen diese Browser anders???

Danke für Ideen

  1. Content-Type: application/x-www-form-urlencoded
    Content-Length: 78

    Beim Test verschiedener Browser klappt das aber nicht bei allen Browsern.
    z.B. mit dem Uralt
    Netscape/7.02
    oder dem Mozilla/5.0
    kommt weder der Content-Type, noch die Content-Length noch die Daten.

    Was machen diese Browser anders???

    Erstmal nichts, die Definition dieses Vorgangs ist bestimmt 20 Jahre alt, in jedem Falle deutlich älter als deine beiden Browser, und zu deuteln gibt es da auch herzlich wenig. Insofern wäre meine Frage eher: Was macht dein Webserver, dein Skript, dein Sonstwas anders?

    1. Content-Type: application/x-www-form-urlencoded
      Content-Length: 78

      Beim Test verschiedener Browser klappt das aber nicht bei allen Browsern.
      z.B. mit dem Uralt
      Netscape/7.02
      oder dem Mozilla/5.0
      kommt weder der Content-Type, noch die Content-Length noch die Daten.

      Was machen diese Browser anders???

      Erstmal nichts, die Definition dieses Vorgangs ist bestimmt 20 Jahre alt, in jedem Falle deutlich älter als deine beiden Browser, und zu deuteln gibt es da auch herzlich wenig. Insofern wäre meine Frage eher: Was macht dein Webserver, dein Skript, dein Sonstwas anders?

      Ich glaube auch, dass das Problem bei mir liegt, aber ich sehe nicht wodurch es verursacht wird.
      Könnte es sein dass die alten Browser das in 2 Paketen schicken.
      Ich lese einfach alles was da kommt und bei diesen Browsern kommt halt keine content-länge und type - und vor allem keine daten.

      Beim Firefox 10 oder anderen ist das völlig unproblematisch.

      1. Netscape/7.02
        oder dem Mozilla/5.0
        kommt weder der Content-Type, noch die Content-Length noch die Daten.

        Was machen diese Browser anders???

        Erstmal nichts, die Definition dieses Vorgangs ist bestimmt 20 Jahre alt, in jedem Falle deutlich älter als deine beiden Browser, und zu deuteln gibt es da auch herzlich wenig. Insofern wäre meine Frage eher: Was macht dein Webserver, dein Skript, dein Sonstwas anders?

        Ich glaube auch, dass das Problem bei mir liegt, aber ich sehe nicht wodurch es verursacht wird.
        Könnte es sein dass die alten Browser das in 2 Paketen schicken.

        Mit Paketen haben die nichts zu tun, auf dieser Ebene schreibt man einfach die gewünschten Bytes in die Schnittstelle bzw. liest so viele aus, wie man gerne haben will.
        Es könnte allenfalls sein - Obacht, wilde Spekulation -, dass die uralten Dinger die Netzwerkfunktionen des Betriebssystems nach Methode Anno Dazumal benutzen, was sich mit einer neueren Version des Systems nicht verträgt.

        Wenn's nun völlig mysteriös erscheint, täte ich den Netzwerkverkehr beobachten (Wireshark, tcpdump) oder, zumindest unter Linux & Co. ganz banal, erstmal einen Port öffnen und dessen Ausgabe an die Shell umleiten: Mit netcat -l 2000 und anschließendem Aufruf von http://[ip-adresse-des-netcat-rechners]:2000 sollte die HTTP-Anfrage, die der Browser sendet, in der Shell auftauchen (POST analog mit einem vorbereiteten Formular, das an diese Adresse sendet).

        Je nachdem, was dabei rauskommt, muss man dann weitersehen, um den Fehler einzugrenzen.

        1. Wireshark sagt, dass auch die alten Browser alles richtig abschicken.
          Da scheint nicht das Problem zu sein, nach aktuellem Stand.

          Die alten Testbrowser liegen auf einem separatem Rechner im selben Netz.
          Es kommt aber nur ein Teil der Daten an. Die Daten die ankommen enden immer an einem Zeilenvorschub, genau vor Content-Length und Content-Type und den darauffolgenden Daten.

          Den socket lese ich mit recv aus.
          recv muss ja nicht notwendig alle Daten aus dem SocketStream auf einmal kriegen.

          Ich habe aber den revc Aufruf in einer Schleife mehrfach wiederholt.
          Es kommt einfach nichts mehr nach, auch wenn ich in der Schleife jeweils 100ms warte.

          Eigentlich habe ich erwartet, dass Bytes die nicht beim ersten mal kommen ohne weitere Aktion dann mit dem nächsten recv weitergelesen werden können. So ist das doch in einem Stream.

          Bei den Browsern die funktionieren kommen alle Bytes immer mit einem einzigen recv-Aufruf.

  2. Hi,

    Beim Test verschiedener Browser klappt das aber nicht bei allen Browsern.
    z.B. mit dem Uralt
    Netscape/7.02

    ist ja cool.
    War in Mitte der 90er mein Lieblingsbrowser (mit den Kometenschauer im Logo) :-)
    Wusste gar nicht, dass man den noch downloaden kann.
    Wieso benutzt du den?

    Viele Grüße aus LA

    --
    ralphi
  3. Hol dir Wireshark und schau zu was da hin und hergeschickt wird.
    Wenn der Host nicht richtig antwortet war wahrscheinlich schon die Anfrage falsch. Mehr lässt sich da erst sagen wenn bekannt ist was der Browser tatsächlich macht.