Frangoo: AJAX: Cross-Site-Request.... ich verzweifle bald :-(

Hallo,

ich verzweifle grade an dem Thema Cross-Site-Request :-(

Meine Situation: Ich möchte für meine 3 verschiedenen Domains eine Mail-Funktion einrichten. Also jede Webpage soll per AJAX auf ein Script zum Versenden per Mails zugreifen, das auf einem anderen Server liegt (und das Ergebnis entsprechend zurückgeben).
Die Übergabe habe ich mit XMLHttpRequest realisiert, die Daten werden per POST geschickt.

Problem 1): Dies ist grundsätzlich wg. Sicherheitseinstellungen nicht möglich - ist auch verständlich für mich.

Also habe ich stundenlang gegoogelt - aber nichts passendes gefunden, was mir hilft. Mein Problem ist auch, dass ich von Server-Configs und -communications nicht viel Ahnung habe - leider.
Dann habe ich gelesen, dass die beste Methode ein PROXY sei.
Also habe ich einen Freund gebeten, mir so etwas einzurichten, und wenn ich den Proxy im Browser aufrufe und als Parameter den der anzutriggernden URL angebe, leitet mich der Proxy auch korrekt auf diese Seite weiter.
Aber wenn ich dieses Proxy-File als Ziel-URL in der AJAX-Methode aufrufe, bekomme ich nur eine neue, mir unklare Fehlermeldung:

Fehlercode: 302
Status: Moved Temporarily

Und Firebug zeigt mir an:
uncaught exception: Sicherheitsfehler: Inhalt auf http://www.e..blablbla.html darf keine Daten von http://mailer.c..blablabla/mailer/start.mail?referrer=http://www.em. c...blablablabl..w.html&country=em&module=c&from=e&to=e&to=e&field_sendername=e&field_friendname=e&subject= %09%09%09%09%09%09%09%09%09%09%09%09%09%09%09%09%09%09%09Subject%09%09%09 %09%09%09%09%09%09%09%09&field_message=e e&text= %09%09%09%09%09%09%09%09%09%09%09%09%09%09%09%09%09%09%09I%20just%20checked%20out%20the%20latest%20and%20t% 09%09%09%09%09%09%09%09%09%09%09&salutation=%09%09%09%09%09%09%09% 09%09%09%09%09%09%09%09%09%09%09%09Hi%09% 09%09%09%09%09%09%09%09%09%09&field_link=http://www.em.c...bla blabla.html laden.

Wo liegt hier der Fehler (wenn man das so sagen kann?)? Ist der Proxy falsch eingerichtet? Habe ich eine falsche Methode? Einen Denkfehler?

Bin über jede kleine Hilfe äußerst dankbar.....

Frangoo

  1. Lieber Frangoo,

    Du willst also per XMLHttpRequest Daten von einer anderen Domain holen?

    Die Sicherheitseinstellungen kannst Du nur dann "überlisten", wenn Dein Request an die gleiche Domain geht, von welcher Deine Seite geladen wurde. Schreibe also Deine serverseitigen Scripte so, dass diese sich die Daten von den jeweils anderen Domains holen und gib deren Ergebnis im XML-Response an den Request zurück!

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. Lieber Frangoo,

      Du willst also per XMLHttpRequest Daten von einer anderen Domain holen?

      Japp :)

      Schreibe also Deine serverseitigen Scripte so, dass diese sich die Daten von den jeweils anderen Domains holen und gib deren Ergebnis im XML-Response an den Request zurück!

      Ja - aber das klingt für mich grade wie ein Widerspruch: Dass die serverseitigen Scripte sich die Daten von anderen Domains holen? Das ist es doch grade, was nicht geht?
      Und wie kann ich die Ergebnisse im XML-Response an den Request zurückgeben?

      Irgendwie kriege ich kein "Land in Sicht" bei diesem Thema.... ich verstehe nicht, worauf es da ankommt :-[
      Könntest du mir das vielleicht an einem ganz kleinen Beispiel / Schema verdeutlichen?

      danke danke danke!!

      Frangoo

      1. Mahlzeit,

        Du willst also per XMLHttpRequest Daten von einer anderen Domain holen?

        Japp :)

        Obwohl Du weißt, dass das nicht geht? Sportlich ... ;-)

        Schreibe also Deine serverseitigen Scripte so, dass diese sich die Daten von den jeweils anderen Domains holen und gib deren Ergebnis im XML-Response an den Request zurück!

        Ja - aber das klingt für mich grade wie ein Widerspruch: Dass die serverseitigen Scripte sich die Daten von anderen Domains holen? Das ist es doch grade, was nicht geht?

        Nein. Was nicht geht, ist dass der im Client ausgeführte Javascript-Code, der von Domain example.com stammt, einen XMLRequest auf example.org ausführen darf.

        Wenn Du aber per Javascript einen XMLRequest auf example.com ausführst und das serverseitige Skript (z.B. PHP), das Du damit aufrufst, intern die Daten erstmal von example.org holt und dann direkt als XML ausgibt, könnte es funktionieren.

        Und wie kann ich die Ergebnisse im XML-Response an den Request zurückgeben?

        Mit der serverseitigen Skriptsprache Deiner Wahl.

        Irgendwie kriege ich kein "Land in Sicht" bei diesem Thema.... ich verstehe nicht, worauf es da ankommt :-[

        Das scheint mir auch so - Dir scheinen wichtige Grundlagen in bezug auf Client-Server-Verbindungen und HTTP zu fehlen ... Google ist Dein Freund

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
        1. Hallo,

          Das scheint mir auch so - Dir scheinen wichtige Grundlagen in bezug auf Client-Server-Verbindungen und HTTP zu fehlen ... Google ist Dein Freund

          Japp, das ist mein Problem dabei, ich weiß.
          WErde mich da nochmal genauer einlesen... und werde mir jetzt mal eure Ideen in Ruhe durcharbeiten, vielen Dank !!!!!

          Hoffe dass ich das jetzt hinkriege :)

          Frangoo

      2. Hi,

        Ja - aber das klingt für mich grade wie ein Widerspruch: Dass die serverseitigen Scripte sich die Daten von anderen Domains holen? Das ist es doch grade, was nicht geht?

        Das ist kein Problem. Ein Problem ist es mit JS als clientseitiger Scriptsprache.

        Irgendwie kriege ich kein "Land in Sicht" bei diesem Thema.... ich verstehe nicht, worauf es da ankommt :-[

        Daß JS nur mit der Domain kommuniziert, auf der auch die Seite läuft, in die das JS eingebunden ist.

        Könntest du mir das vielleicht an einem ganz kleinen Beispiel / Schema verdeutlichen?

        JS http://example.com/mail.html -> PHP-Script http://example.com/mail.php?data=test&url=example.org/target.php -> PHP sendet Daten "test" an Script auf example.org (wo JS nicht hinkommt)., und gibt die Antwort (für JS) aus.

        Oder eben mit einem Proxy - z.B. mod_proxy:

        RewriteEngine on
        RewriteBase   /xsrv
        RewriteRule ^(.*) http://example.org/$1 [P]

        Wenn JS da das Verz. /xsrv aufruft, wird die Anfrage durchgeleitet:

        http://example.com/xsrv/target.php?data=test (JS greift auf .com zu: eigener Server)

        ->

        http://example.org/target.php?data=test (hierhin geht die Anfrage wirklich - .org: direkt nicht möglich)

        Gruß, Cybaer

        --
        Man kann doch sehr leicht jenen tugendhaften Menschen begegnen, (...) die eine Art "unkrümmbaren Zeigefinger" besitzen, der ständig den kalten Wind des Rechthabens ausströmt. (Wolfgang Huber, Bischof)
        Die Tugend jagt nicht den Teufel, sondern den Sündhaften. Damit wird sie zum Terror. (Hans-Ulrich Jörges, Journalist)
  2. Hello,

    ich weiß nicht, wie es sich mit AJAX verhält, aber prinzipiell müsste es möglich sein, wenn du die JS-Funktionen in eine externe Datei auslagerst und diese auf die "Mail"-Domain legst. Du bindest dann in deine Seite auf Domain A ein script von Domain "mail" ein - dieses sollte dann Zugriff auf den lokalen Seiteninhalt und die URLs der Domain "mail" erhalten.

    MfG
    Rouven

    --
    -------------------
    sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
    We found ourselves looking upon a familiar sight. We were home. How do you pick up the threads of an old life? How do you go on... when in your heart you begin to understand... there is no going back? There are somethings that time cannot mend... some hurts that go too deep... that have taken hold.  --  The Lord of the Rings: The Return of the King (Peter Jackson)
    1. Hi,

      ich weiß nicht, wie es sich mit AJAX verhält, aber prinzipiell müsste es möglich sein, wenn du die JS-Funktionen in eine externe Datei auslagerst und diese auf die "Mail"-Domain legst. Du bindest dann in deine Seite auf Domain A ein script von Domain "mail" ein - dieses sollte dann Zugriff auf den lokalen Seiteninhalt und die URLs der Domain "mail" erhalten.

      Hm, ja das war eine meiner Ideen. Ich habe diese Datei also dann im Head ganz normal eingebunden, aber es hat nichts gebracht.
      Eigentlich ist dieses Verhalten ja auch logisch, weil das Javascript Files doch immer relativ zum HTML-Dokument sucht, und nicht relativ zum Ursprungsort (oder?).

      Oder müsste dieses Script anders eingebunden werden?

      Danke für dein Posting schonmal,

      Gruß Frangoo

      1. Mahlzeit,

        Hm, ja das war eine meiner Ideen. Ich habe diese Datei also dann im Head ganz normal eingebunden, aber es hat nichts gebracht.

        WO hast Du WAS WIE eingebunden (Beispielcode!)?

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
        1. Hallo Ekki,

          Hm, ja das war eine meiner Ideen. Ich habe diese Datei also dann im Head ganz normal eingebunden, aber es hat nichts gebracht.

          WO hast Du WAS WIE eingebunden (Beispielcode!)?

          OK, hier der Beispielcode (gekürzt...Beispielhaft):

          Eigene Domain: www.gutkaufen.de

          <head>
          <script type="text/javascript" src="/abc/ajax-functions.js">
          </script>
          <script type="text/javascript" src=
          "http://mailer.meinserver.de/mailer/mail-function.js">
          </script>

          </head>

          Wenn ich dann in der "mail-functions.js" ein File in die URL zum senden des XmlHttpRequest-Objekts eingetragen habe, was auf "meinserver.de" liegt, hat er es einfach nicht gefunden, weil er auf dem Server von "gutkaufen.de" danach gesucht hat (konnte ich mit Firebug gut ablesen), also wo das HTML liegt.

          Sollte mir da ein peinlicher Fehler unterlaufen sein?

          Gruß Frangoo

          PS: Ich verzweifle daran, weil ich weiß, dass es irgendwie gehen muss - Google macht es mit den Google-Maps ja vor :-|

          1. Moin!

            Eigene Domain: www.gutkaufen.de

            <head>
            <script type="text/javascript" src="/abc/ajax-functions.js">
            </script>
            <script type="text/javascript" src=
            "http://mailer.meinserver.de/mailer/mail-function.js">
            </script>

            </head>

            Wenn ich dann in der "mail-functions.js" ein File in die URL zum senden des XmlHttpRequest-Objekts eingetragen habe, was auf "meinserver.de" liegt, hat er es einfach nicht gefunden, weil er auf dem Server von "gutkaufen.de" danach gesucht hat (konnte ich mit Firebug gut ablesen), also wo das HTML liegt.

            Das ist "normal". Entscheidend für die Auswahl der erlaubten Domain ist, woher das HTML gekommen ist, das im Browser angezeigt wird.

            Man kann natürlich Javascript-Code von anderen Servern einbinden. Aber man kann NICHT solchen eingebundenen Code dazu bringen, dann wieder an die Domain des Codeursprungs zurückzusenden, sondern immer nur an die Domain des HTML-Ursprungs.

            - Sven Rautenberg

            --
            "Love your nation - respect the others."
      2. Hello,

        ich dachte an etwa folgende Konstellation, so wie sie auch Google Maps verwendet. Du hast eine Seite auf deine Domain A, dein Mailer liegt auf example.com. Was du jetzt machst ist:
        <script type="text/javascript" href="http://www.example.com/mein_tolles_ajax.js"></script>

        MfG
        Rouven

        --
        -------------------
        sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
        Unser Problem ist, dass wir eine Demokratie entwickelt haben, was nicht immer der richtige Weg ist  --  Bernie Ecclestone zu den lästigen Diskussionen um Regeländerungen in der Formel 1
        1. Hello,

          <script type="text/javascript" href="http://www.example.com/mein_tolles_ajax.js"></script>

          sorry, war blind geschrieben, ich meinte natürlich src=...

          MfG
          Rouven

          --
          -------------------
          sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
          Inter Arma Enim Silent Leges  --  Cicero
    2. Hi,

      ich weiß nicht, wie es sich mit AJAX verhält, aber prinzipiell müsste es möglich sein, wenn du die JS-Funktionen in eine externe Datei auslagerst und diese auf die "Mail"-Domain legst. Du bindest dann in deine Seite auf Domain A ein script von Domain "mail" ein - dieses sollte dann Zugriff auf den lokalen Seiteninhalt und die URLs der Domain "mail" erhalten.

      Nein, hat es nicht.
      Weder JavaScript allgemein, noch AJAX im speziellen hat Zugriff auf andere Domains als die, unter der es *eingebunden* bzw. ausgefuehrt wird.

      MfG ChrisB

      1. Hi ChrisB,

        Nein, hat es nicht.
        Weder JavaScript allgemein, noch AJAX im speziellen hat Zugriff auf andere Domains als die, unter der es *eingebunden* bzw. ausgefuehrt wird.

        MfG ChrisB

        ja diese Erfahrung habe ich auch gemacht. Danke! Also habe ich da schonmal nichts falsch gemacht :)

      2. Hallo ChrisB,

        Weder JavaScript allgemein, noch AJAX im speziellen hat Zugriff auf andere Domains als die, unter der es *eingebunden* bzw. ausgefuehrt wird.

        weißt du, wie die Google Maps API dann an die Daten kommt?

        Gruß, Jürgen

        1. Hi,

          weißt du, wie die Google Maps API dann an die Daten kommt?

          Hab mich mit dem Ding noch nicht naeher beschaeftigt - aber welche "Daten" meinst du denn?

          Erzeugt die nicht einfach nur Bildobjekte, die dann den Browser dazu bringen, die entsprechenden Grafikressourcen zu laden? Ja, das geht selbstverstaendlich auch ueber Domaingrenzen hinweg - aber das ist ja dann auch kein direktes Laden von Inhalten "durch JavaScript" ...

          MfG ChrisB

          1. Hello,

            Erzeugt die nicht einfach nur Bildobjekte, die dann den Browser dazu bringen, die entsprechenden Grafikressourcen zu laden? Ja, das geht selbstverstaendlich auch ueber Domaingrenzen hinweg - aber das ist ja dann auch kein direktes Laden von Inhalten "durch JavaScript" ...

            genau, zu der Überlegung mit den Bildern bin ich dann gestern abend auch gekommen. Allerdings gibts da noch den GeoCoder, bei dem weiß ich nicht, wie er arbeitet...

            MfG
            Rouven

            --
            -------------------
            sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
            There's no such thing as a free lunch  --  Milton Friedman
            1. Hallo Rouven, hallo ChrisB,

              vielen Dank an euch beide.

              Gruß, Jürgen

            2. Hi,

              genau, zu der Überlegung mit den Bildern bin ich dann gestern abend auch gekommen. Allerdings gibts da noch den GeoCoder, bei dem weiß ich nicht, wie er arbeitet...

              Du kannst dem JS ja (fast) beliebige GET-Parameter mitgeben. Diese Parameter kann der X-Server dann verarbeiten, und ein entsprechend spezifisches JavaScript erzeugen und ausliefern.

              Im Falle der Google-Maps bekommt die Engine die Scriptart ("api"), (vermutlich) die Versionsnummer und den Benutzerschlüssel.

              Gruß, Cybaer

              --
              Man kann doch sehr leicht jenen tugendhaften Menschen begegnen, (...) die eine Art "unkrümmbaren Zeigefinger" besitzen, der ständig den kalten Wind des Rechthabens ausströmt. (Wolfgang Huber, Bischof)
              Die Tugend jagt nicht den Teufel, sondern den Sündhaften. Damit wird sie zum Terror. (Hans-Ulrich Jörges, Journalist)
  3. Mahlzeit,

    ich verzweifle grade an dem Thema Cross-Site-Request :-(

    Ja? Warum, das ist doch einfach: es geht nicht.

    Problem 1): Dies ist grundsätzlich wg. Sicherheitseinstellungen nicht möglich - ist auch verständlich für mich.

    Wenn es für Dich verständlich ist, wieso suchst Du dann stundenlang nach einer Lösung, die nicht existiert?

    Javascript-Code, der von der Domain example.com geladen wurde und der im Browser ausgeführt wird, DARF keinen XMLRequest auf z.B. example.org machen. Fertig, aus. Das kannst Du auch nicht ändern - außer, Du programmierst Dir einen eigenen Browser.

    Was Du machen könntest, ist den Code, der den XMLRequest auf example.org machen soll, auch von dort herunterzuladen (siehe Rouvens Vorschlag).

    Einen Denkfehler?

    Eher den ... :-)

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
    1. Moin!

      Was Du machen könntest, ist den Code, der den XMLRequest auf example.org machen soll, auch von dort herunterzuladen (siehe Rouvens Vorschlag).

      Funzt nicht. Entscheidend für die Domains, an die Javascript zurücksenden darf, ist die HTML-Quelle, nicht die Javascript-Quelle.

      Einen Denkfehler?

      Eher den ... :-)

      Den hast du (und Rouven) auch gemacht.

      - Sven Rautenberg

      --
      "Love your nation - respect the others."
      1. Mahlzeit,

        Einen Denkfehler?

        Eher den ... :-)

        Den hast du (und Rouven) auch gemacht.

        Scheint so. Naja, hätte ja klappen können ... also das Funzen. ;-)

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|