C. Ohme: readyState == 4 erst nach TCP Retransmission

Hallo,

in meinem Script sende ich ein XMLHttpRequest an einen Server. In Wireshark kann ich beobachten, dass diese Anfrage tatsächlich gesendet wird, aber jedesmal ein Retransmit des Servers erforderlich ist, damit die Funktion, welche bei onreadystatechange aufgerufen wird, den Wert 4 für readyState verarbeiten kann. Woran liegt das? Es kostet ca. 300ms bis die Serverantwort erneut gesendet wurde, was bei vielen Anfragen sehr unschön ist. Kann mir jemand einen Tipp geben?

  1. in meinem Script sende ich ein XMLHttpRequest an einen Server. In Wireshark kann ich beobachten, dass diese Anfrage tatsächlich gesendet wird, aber jedesmal ein Retransmit des Servers erforderlich ist, damit die Funktion, welche bei onreadystatechange aufgerufen wird, den Wert 4 für readyState verarbeiten kann.

    Was erwartest du denn stattdessen?

    Struppi.

    1. Was erwartest du denn stattdessen?

      Naja, ich sehe in Wireshark meine Anfrage (request.open('get', url, true);), dann eine Antwort vom Server mit HTTP/1.1 200 und erst bei der zweiten Antwort, die einfach nur eine Retransmission der bereits erhaltenen Antwort darstellt, reagiert mein Skript auf readyState == 4. Wofür die erneute Übertragung? Die Daten liegen doch schon vor!

      1. Was erwartest du denn stattdessen?

        Naja, ich sehe in Wireshark meine Anfrage (request.open('get', url, true);), dann eine Antwort vom Server mit HTTP/1.1 200 und erst bei der zweiten Antwort, die einfach nur eine Retransmission der bereits erhaltenen Antwort darstellt, reagiert mein Skript auf readyState == 4. Wofür die erneute Übertragung? Die Daten liegen doch schon vor!

        Keine Ahnung, das ist mir neu. Aber ich muss sagen, ich hab' das noch nicht so genau analysiert.
        Allerdings wäre es seltsam, wenn dieses Verhalten erst dir aufgefallen wäre.

        Struppi.

      2. Hallo,

        Naja, ich sehe in Wireshark meine Anfrage (request.open('get', url, true);), dann eine Antwort vom Server mit HTTP/1.1 200 und erst bei der zweiten Antwort, die einfach nur eine Retransmission der bereits erhaltenen Antwort darstellt, reagiert mein Skript auf readyState == 4. Wofür die erneute Übertragung?

        ich stelle die Frage anders: Was veranlasst den Server überhaupt, die Antwort ein zweites Mal zu senden? Wird das serverseitige Script zweimal aufgerufen?
        Deine Beschreibung liest sich eher so, als würde dein Rechner das TCP-Paket, das die HTTP-Antwort enthält, gar nicht quittieren. Das wäre dann aber ein ernstes Problem im TCP/IP-Protokollstack deines Rechners.

        Die Daten liegen doch schon vor!

        Wirklich? Für mich wäre es jetzt interessant, *wo* du mit Wireshark horchst. Auf dem Client-PC, auf dem auch deine Javascript-Applikation läuft? Oder auf dem Server, der scheinbar zweimal antwortet? Oder auf einem unbeteiligten dritten Rechner, der am Netzwerkkabel dazwischen lauscht?
        Siehst du in Wireshark ein TCP-ACK, das dein Rechner als Reaktion auf die erste Serverantwort sendet?

        Fragen über Fragen ...

        So long,
         Martin

        --
        Ja, ja ... E.T. wusste schon, warum er wieder nach Hause wollte.