Webserver + SSL + AJAX = Ausfälle

  • Webserver + SSL + AJAX = Ausfälle

    Hallo Leute,

    ich habe da grade ein Problem. Zwar ist es hier vll. etwas OT, aber ich hoffe, dass Ihr mir trotzdem helfen könnt.

    Ich habe ein Script, dass per XMLHttpRequest die Daten holt. Lasse ich das Script per http laufen, funktioniert alles 100%! Versehe ich das ganze jetzt mal mit einer SSL Verschlüsselung, werden einige Requests beim IE nicht mehr ausgeführt. Bei FF funktioniert hingegen immernoch alles. Der Request bleibt die ganze Zeit im Status loading (1).

    Als ich mir das ganze etwas näher angeschaut habe, habe ich folgendes festgestellt:

    -Der Webserver erstellt bei der Anfrage, wo die ganze Geschichte hängen bleibt, keinen Log Eintrag.
    -Es wird aber ein Request an den Server geschickt. Mittels tcpdump konnte man sehen, dass ein Request eingegangen ist.

    Ich habe das ganze auf zwei (gentoo) Servern probiert, sowohl mit apache als auch mit dem lighttpd. Hat jemand von euch eine Idee, woran das liegen kann? Btw. bei einem Server hing das Script öffter, als bei dem anderen.
  • Nein, es werden automatisch keine Verbindungen aufgebaut, es wird nur dann ein Request abgeschickt, wenn er auch gebraucht wird (User Klickt irgendwo drauf).


    Und ohne SSL funzt schließlich alles andere..... Die verwendete Verbindung scheint auch ein Problem zu spielen. Ich bin mit 100MBit angebunden, hier taucht der Fehler nie auf, bei einem Freund, der einen DSLer 2MBit hat, taucht der Fehler permanent auf
  • naja, wenn es wirklich so große datenmengen sind, kann es natürlich dennoch sein, dass mehrere verbindungen aufgebaut werden

    dass da SSL mehr performance zieht, bezweifle ich aber auch.
    meldet der firefox von sich aus keine fehler?
    wie sieht es mit ein paar eigenen excpetions aus

    vielleicht ein try-catch mit alert um das "new XMLHttpRequest"
  • Also das Problem ist auch, dass weder FF noch der IE einen Fehler meldet.

    Das ganz komische ist außerdem, dass es anscheinend auch von der Leitung abhängt, mit der man versucht auf den Server zuzugreifen. Bei mir bei der Arbeit habe ich eine 100MBit Leitung und da ist der Fehler fast noch nie aufgetreten. Aus der Uni über das WLAN Netzwerk tritt der Fehler an bestimmten Stellen auf. Ist der Fehler aufgetreten und man hat ein zweites Mal draufgeklickt, dann taucht er an dieser Stelle kein zweites Mal auf. Wenn ich jetzt aber den Cache leere und die Cookies lösche, ist er sofort wieder da.

    Bei einem anderen Kumpel (Wohnt am A**** der Welt und ist mehr offline als online), hat nen packetloss von ca. 30%, tritt der Fehler fast beim jeden zweiten Aufruf auf.

    Ich habe privat nur den Zugang über UMTS (Base) ins Internet und da ist der Fehler bisher auch noch nie aufgetreten.
  • sorry, wenn ich zum xten mal nachfrage

    und du hast auch sonst keine try-catches?
    In meinen HowTos im CoderWiki kapsel ich das initialisieren z.B. immer in ein try-catch

    Quellcode

    1. try {
    2. req = window.XMLHttpRequest?new XMLHttpRequest():
    3. new ActiveXObject("Microsoft.XMLHTTP");
    4. } catch (e) {
    5. //Kein AJAX Support
    6. }


    um sinnvoll zu debuggen, müsstest du auch dort ein alert statt dem kommentar einbauen
  • Hi,

    sorry, ich hab in dem ganzen Stress vergessen zu schreiben, dass ich es versucht habe.

    Quellcode

    1. try {
    2. http_request = false;
    3. var method = 'post';
    4. if (window.XMLHttpRequest) {
    5. http_request = new XMLHttpRequest()
    6. } else {
    7. http_request = new ActiveXObject('MSXML2.XMLHttp');
    8. }
    9. http_request.open(method, url + (data && method == 'get' ? '?' + data : ''), true);
    10. http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    11. var data = getFormElements(frm);
    12. if (method == 'post') {
    13. http_request.setRequestHeader("Method", "POST " + url + " HTTP/1.1");
    14. http_request.setRequestHeader("Content-Length", data.length);
    15. }
    16. Timer = setTimeout('wait_req()' , 5000);
    17. http_request.onreadystatechange = funct;
    18. http_request.send(data);
    19. } catch (e) {
    20. alert('Fehler!');
    21. }
    Alles anzeigen


    Doch leider passiert nichts. Es wird da kein Fehler gemeldet