ronin: ajax request auf server ?

Hallo,

ich habe folgendes Problem:

Ich habe dieses Tutorial(http://developer.mozilla.org/De/AJAX/Getting_Started) benutzt und für meine Zwecke umgeschrieben(bzw Schritt 3) also statt nen Request an "test.html" an "http://www.blabla.de" gesendet und habe mir den ResponseText nicht per alert ausgebeben lassen sondern in ner textarea...so konnt ich mir den Quelltext jeder beliebigen Seite anzeigen lassen...
Nun hatte ich dieses Script immer lokal von meinem Rechner laufen lassen,aber wollte es mal auf online auf einem Server testen.Da habe ich es also bei funpic hochgeladen und wollte von dort einen Request absetzen...jedoch passierte da gar nix!

Nun frage ich mich woran das liegt...Ich hab schon mehrere Tage danach gesucht aber das einzige was ich immer gefunden hab war etwas mit Sicherheitsproblemen. Aber irgendwie mag das nicht in meinen Kopf reingehen denn ich "verlange" ja nur den HTML Quelltext (dasgleiche was der browser macht) und warum sollte das nur lokal funktionieren und nicht auf einem Server...

Hat jemand eine Idee woran das liegen könnte?
Danke schon mal im voraus

Gruß Ronin

  1. Hi,

    Nun hatte ich dieses Script immer lokal von meinem Rechner laufen lassen,aber wollte es mal auf online auf einem Server testen.Da habe ich es also bei funpic hochgeladen und wollte von dort einen Request absetzen...jedoch passierte da gar nix!

    Nun frage ich mich woran das liegt...

    hast Du vom funpic-Server einen Request an den selben(!) funpic-Server (identifiziert durch Protokoll, Host und Port) gesendet? Wenn nicht, geht es aus Sicherheitsgründen garantiert schief.

    Ich hab schon mehrere Tage danach gesucht aber das einzige was ich immer gefunden hab war etwas mit Sicherheitsproblemen.

    Ja. Sicherheit ist nie erreichbar, aber trotzdem ein Absolutum.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. hast Du vom funpic-Server einen Request an den selben(!) funpic-Server (identifiziert durch Protokoll, Host und Port) gesendet? Wenn nicht, geht es aus Sicherheitsgründen garantiert schief.

      nein immernoch an eine fremde seite...nehmen wir an http://forum.de.selfhtml.org...
      aber dann frag ich mich echt warum wenn ich es lokal mache null probleme gibt aber sobald ich es hochlade nicht mehr funktioniert ? ich will es bloß verstehen^

      1. Hi,

        nein immernoch an eine fremde seite...nehmen wir an http://forum.de.selfhtml.org...

        das darf auf keinen Fall funktionieren.

        aber dann frag ich mich echt warum wenn ich es lokal mache null probleme gibt

        Wenn "lokal" bei Dir "von http://localhost/... aus" heißt (und Du ihm nicht über die Konfiguration etwas Entsprechendes erlaubt hast), dann hat Dein Browser einen schwerwiegenden Defekt. Hast Du hingegen einfach nur eine Datei von Deiner Festplatte in den Browser geladen, dann sehe ich nicht, wie Du diese beiden völlig unterschiedlichen Bedingungen vergleichen möchtest.

        ich will es bloß verstehen^

        Von Server zu Server: Same Origin Policy. Von etwas anderem als einem Server: Völlig anderer Use-Case. Wäre ich ein Browser-Hersteller, würde ich jeden Zugriff auf einen Server strikt verbieten; aber das sehen einige wohl anders.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. also ich glaub net das mein browser nen defekt hat...es lief bei vielen anderen auch...aber zB läuft es bei mir nur im firefox. einfach als html speichern und mit firefox öffnen.
          wenn es so utopisch für dich klingt,dann teste es doch einfach^^

          quelltext:

          <html>
          <head>
          <title>request</title>
          </head>
          <script language="JavaScript">
              var http_request = false;
           var uri=0;

          function macheRequest(url) {

          http_request = false;
           if (window.XMLHttpRequest) { // Mozilla, Safari,...
            http_request = new XMLHttpRequest();
            if (http_request.overrideMimeType) {
             http_request.overrideMimeType('text/xml');
             netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead');
             // zu dieser Zeile siehe weiter unten
            }
           } else if (window.ActiveXObject) { // IE
            try {
             http_request = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
             try {
              http_request = new ActiveXObject("Microsoft.XMLHTTP");
             } catch (e) {}
            }
           }

          if (!http_request) {
            alert('Ende :( Kann keine XMLHTTP-Instanz erzeugen');
            return false;
           }
           http_request.onreadystatechange = alertInhalt;
           http_request.open('GET', url, true);
           http_request.send(null);

          }

          function alertInhalt() {

          if (http_request.readyState == 4) {
            if (http_request.status == 200) {

          gesamt=http_request.responseText;
                               document.request.ausgabe.value=gesamt;

          // window.document.getElementById("text").innerHTML=http_request.responseText;
            } else {
               // window.document.getElementById("text").innerHTML=http_request.responseText;
            }
           }

          }

          </script>
          <body text="#000000" bgcolor="#FFFFFF" link="#FF0000" alink="#FF0000" vlink="#FF0000">

          <form name="request">
          <input type="button" value="einen request machen" onClick="javascript:macheRequest('http://forum.de.selfhtml.org/')">
          <textarea cols="120" rows="20" name="ausgabe"></textarea>
          </form>

          </body>
          </html>

          1. Hallo,

            Was ist jetzt deine Frage? Dein Script fordert Privilegien an; wenn man die ablehnt, was ein Benutzer in jedem Fall aus Sicherheitsgründen tun sollte, dann funktioniert der Cross-Site XMLHttpRequest natürlich nicht.

            Funktioniert das nicht online, also kommt gar keine Sicherheitsabfrage? Dann hast du wohl keine Chance.

            Mathias

            1. Hallo,

              Was ist jetzt deine Frage? Dein Script fordert Privilegien an; wenn man die ablehnt, was ein Benutzer in jedem Fall aus Sicherheitsgründen tun sollte, dann funktioniert der Cross-Site XMLHttpRequest natürlich nicht.

              Funktioniert das nicht online, also kommt gar keine Sicherheitsabfrage? Dann hast du wohl keine Chance.

              Mathias

              online(vom server) passiert nix.
              lokal (zB in vom desktop^^) gehts.
              meine frage war ob man es hinkriegen kann das ses oonline geht bzw wenn nicht ob mir das vlei einer genauer erklären könnte.

              1. Hallo,

                meine frage war ob man es hinkriegen kann das ses oonline geht

                Nein.

                bzw wenn nicht ob mir das vlei einer genauer erklären könnte.

                Die Same Origin Policy ist ein grundlegendes Sicherheitskonzept von JavaScript. Man darf in JavaScript weder in Fenster hineinfuschen, in denen Dokumente von fremden Servern angezeigt werden, noch HTTP-Anfragen an fremde Server absenden, um dort Daten abzugreifen. Wenn es diese Sicherheitsregel nicht gäbe, gäbe es schwerwiegende Missbrauchsmöglichkeiten.

                Mathias

                1. Hi,

                  meine frage war ob man es hinkriegen kann das ses oonline geht

                  Nein.

                  Naja, es geht zumindest nicht allein mit Javascript.
                  Eine Lösung wäre ein serverseitiges Script (z.B. Perl, PHP, ...) auf den Server zu legen auf dem auch die Seite liegt, von der aus die fremde Seite angefordert werden soll.
                  Dieses Script fordert dann die externe Seite an und liefert den Inhalt an die AJAX-Anfrage.

                  Also so:
                  seite.html und getContent.php liegen auf deinem Server, in seite.html ist der AJAX-Request. getContent.php fordert den Inhalt vom fremden Server an und gibt diesen aus. Der AJAX-Request muss jetzt anstatt der fremden Seite die getContent.php aufrufen.
                  So klappt es.

                  mfG,
                  steckl

                  1. super!danke!
                    sowas hat ich mir gedacht und hab auch schon ne weile gegoogelt!

                    dabei war diesmal das problem das mit php das nur befehlen,also fopen,fsocketopen usw geht und die bei den meisten webhostern nicht erlaubt...

                    oder welche methode würdest du anwenden bzw würdest du mir den quelltext mal zeigen?in ajvascript hab ich ahnung aber in php bin ich noch nicht so bewandert^^

                    1. Hi,

                      dabei war diesmal das problem das mit php das nur befehlen,also fopen,fsocketopen usw geht und die bei den meisten webhostern nicht erlaubt...

                      Hier ist wohl irrelevant was die meisten Hoster erlauben, sondern es interessiert ja eigentlich nur was DEIN Hoster erlaubt.

                      oder welche methode würdest du anwenden bzw würdest du mir den quelltext mal zeigen?

                      Ich würde es mit Perl lösen ...

                      in ajvascript hab ich ahnung aber in php bin ich noch nicht so bewandert^^

                      ... da das mit PHP bei mir genauso ist.

                      Ich hatte übrigens mal das gleiche Problem wie du. (In dem verlinkten Thread findest du auch eine Perl-Lösung)

                      mfG,
                      steckl

                      1. Ich hatte übrigens mal das gleiche Problem wie du. (In dem verlinkten Thread findest du auch eine Perl-Lösung)

                        mfG,
                        steckl

                        hm, könntest du mal den kompletten quelltext der pearl datei liefern weil ich hab das jetzt nach stundenangem probieren noch nicht hingekriegt,weil pearl is mir noch ganz fremd!^^

                        wäre dir sehr sehr dankbar!!!

                        gruß ronin

                        1. Hi,

                          hm, könntest du mal den kompletten quelltext der pearl datei liefern

                          Wenn du dem Link folgst und etwas nach unten scrollst findest du den kompletten Quelltext (mehr ist das nicht) und noch bisschen weiter unten ist noch ein Verbesserungsvorschlag von Siechfred.

                          weil ich hab das jetzt nach stundenangem probieren noch nicht hingekriegt,

                          Was hast du versucht und welche Fehler sind aufgetreten?

                          weil pearl is mir noch ganz fremd!^^

                          Gibt es andere serverseitige Sprachen die dir nicht Fremd sind? Wenn ja solltest du diese verwenden, falls du nicht vorhast Perl zu lernen.

                          mfG,
                          steckl

                          PS: Du meinst Perl und nicht Pearl.

                          1. Gibt es andere serverseitige Sprachen die dir nicht Fremd sind? Wenn ja solltest du diese verwenden, falls du nicht vorhast Perl zu lernen.

                            mfG,
                            steckl

                            ja php...da habe ich es auch grade hibekommen...nur ist nun das problem das ich einen browser "simulieren" muss...das heißt session cookies usw...weil ich bei einer seite eine anfrage stelle bei dir ich aber als eingeloggt gelten muss(browsergame)....und wenn ich das jetzt nur mit file_get_content mache dann krieg ich halt nur die startseite...weil ich ja "theoretisch" nicht eingeloggt bin.

                            ps: und ja ich meinte PERL...war bloß mitten in der arbeit vertieft das ich an perle dachten muss^tja nun ist die frage wie man das macht

                          2. Hi,

                            hm, könntest du mal den kompletten quelltext der pearl datei liefern

                            Wenn du dem Link folgst und etwas nach unten scrollst findest du den kompletten Quelltext (mehr ist das nicht) und noch bisschen weiter unten ist noch ein Verbesserungsvorschlag von Siechfred.

                            weil ich hab das jetzt nach stundenangem probieren noch nicht hingekriegt,

                            Was hast du versucht und welche Fehler sind aufgetreten?

                            weil pearl is mir noch ganz fremd!^^

                            also meine erste frage wäre wie das javascript(ajax)-script aussieht^^
                            und ob es nur die beiden dateien sind die ich brauche...

                            und wenn ich alles auf nen server lade was davon ich wie öffnen muss...

                            1. Hi,

                              also meine erste frage wäre wie das javascript(ajax)-script aussieht^^

                              Du musst in deinem AJAX-Request nur einen andere URL angeben. Und zwar die des serverseitigen Scripts (z.B. getContent.php).

                              und ob es nur die beiden dateien sind die ich brauche...

                              Ja, das reicht, falls du den Content nur anzeigen willst.

                              Es wäre auch noch möglich nur eine PHP-Datei zu verwenden, aber dann müsstest du diese jedesmal neu laden anstatt auf den Button für den AJAX-Request zu drücken. Das ist wohl geschmacksache.

                              und wenn ich alles auf nen server lade was davon ich wie öffnen muss...

                              Du musst dann nur deine HTML-Datei aufrufen und von dort per AJAX deine PHP-Datei aufrufen lassen.

                              mfG,
                              steckl

                              1. ich bin verwirrt^^

                                also ich habe jetzt eine hmtl datei (ajax.html) :

                                  
                                <html>  
                                <head>  
                                <title>ajax</title>  
                                <script language="JavaScript">  
                                  
                                function request(file) {  
                                http_request.open("GET", file, true);  
                                }  
                                </script>  
                                </head>  
                                <body >  
                                  
                                <form>  
                                <input type="button" value="go" onClick="javascript:request('getExtUrl.pl?URL=http://www.google.de')">  
                                </form>  
                                  
                                </body>  
                                </html>  
                                
                                

                                und eine perl datei (getExtUrl.pl):

                                #!/usr/local/bin/perl -w

                                use strict;

                                use LWP::Simple qw(get);
                                use CGI qw(header param);
                                use CGI::Carp qw(fatalsToBrowser);

                                print header();

                                my $urlToLoad = param('URL') || die "No Url given";

                                my $content = get($urlToLoad);

                                print $content;

                                wenn ich das jetzt also richtig verstehe klicke ich auf den button und es wird ein ajax request gemacht an google.de der aber davor auf die perl datei zugreift...
                                so aber was war jetzt mit der getContent.php ? was muss da drin stehen?
                                sorry füe die viele fragerei!^^

                                1. Hi,

                                  also ich habe jetzt eine hmtl datei (ajax.html) :

                                  Da fehlt natürlich noch das ganze AJAX-Zeug, das du hier noch drin hattest.

                                  <input type="button" value="go" onClick="javascript:request('getExtUrl.pl?URL=http://www.google.de')">

                                  Ist dein Server wirklich so konfiguriert, dass Perl-Scripts und HTML-Dateien im gleichen Verzeichnis liegen dürfen?
                                  Standard ist es wohl, dass PERL/CGI-Scripts im Verzeichnis cgi-bin liegen.

                                  Außerdem ist 'javascript:' hier überflüssig.

                                  und eine perl datei (getExtUrl.pl):

                                  Hast du mal versucht diese per Hand also über die Browserleiste aufzurufen?

                                  einfach mal "nameDeinesServers/PfadDerDatei/getExtUrl.pl?URL=www.google.de" eingeben und schaun ob das so klappt.

                                  Außerdem sind da noch einige Unschönheiten drin, auf die mich Siechfred damals hingewiesen hat. Aber prinzipiell müsste es so schon gehen.

                                  #!/usr/local/bin/perl -w

                                  Stimmt dieser Pfad für deinem Server?

                                  wenn ich das jetzt also richtig verstehe klicke ich auf den button und es wird ein ajax request gemacht an google.de der aber davor auf die perl datei zugreift...

                                  Nicht ganz. Der AJAX-Request fordert nur den Content der Perl-Datei an.
                                  Die Perl-Datei macht dann den eigentlichen Request an Google.

                                  Funktioniert das schon?

                                  so aber was war jetzt mit der getContent.php ? was muss da drin stehen?

                                  Das wäre nur die alternative für die Perl-Datei gewesen.

                                  sorry füe die viele fragerei!^^

                                  Du musst ja fragen, wenn du was nicht verstehst, oder du wirst dumm sterben ;-)

                                  mfG,
                                  steckl

          2. Hi,

            einfach als html speichern und mit firefox öffnen.

            ich habe extra nicht nur vom Localhost gesprochen, sondern sogar dessen URL genannt, eben um den Vorgang von "als HTML speichern und öffnen" scharf abzugrenzen. Installiere Dir einen lokalen Server und teste den Aufruf des Dokuments von diesem. Es ist etwas *völlig* unterschiedliches, *un*vergleichbar mit "als HTML speichern und öffnen".

            Cheatah

            --
            X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
            X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes
            1. ja hab es jetzt verstanden.
              hab es auch getestet von nem server auf dem eigenen rechner und du hast natürlich recht es geht nich.
              da werd ich das mal mit php versuchen müssen^^