Warum sehe ich hier einen Fehler "Ursprung ist nicht durch den Fehler der Zugriffskontroll-Allow-Origin-Ursprung?" [Duplikat

StackOverflow https://stackoverflow.com/questions/9310112

Frage

Diese Frage hat hier bereits eine Antwort:

Ich sehe den folgenden Fehler:

Origin http://localhost:8080 is not allowed by Access-Control-Allow-Origin

mit diesem Code:

var http = new getXMLHttpRequestObject();
var url = "http://gdata.youtube.com/action/GetUploadToken";
var sendXML = '<?xml version="1.0"?><entry xmlns="http://www.w3.org/2005/Atom"'+
    'xmlns:media="http://search.yahoo.com/mrss/'+
    'xmlns:yt="http://gdata.youtube.com/schemas/2007">'+
    '<media:group><media:title type="plain">My First API</media:title>'+
    '<media:description type="plain">First API</media:description>'+
    '<media:category scheme="http://gdata.youtube.com/schemas/2007/categories.cat">People</media:category>'+
    '<media:keywords>first, api</media:keywords></media:group></entry>';
http.open("POST", url, true);
http.setRequestHeader("Authorization", "AuthSub token=" + AccessToken);
http.setRequestHeader("X-GData-Key", "key="+ dev_key);
http.setRequestHeader("Content-Type", "application/atom+xml; charset=UTF-8");

http.onreadystatechange = function() {
    if(http.readyState == 4) {
        alert(http.responseXML);
    }
}
http.send(sendXML);

Was kann das verursachen und wie löste ich es?

War es hilfreich?

Lösung

JavaScript ist begrenzt, wenn AJAX -Anfragen außerhalb der aktuellen Domäne gestellt werden.

  • Ex 1: Ihre Domain ist Beispiel.com und Sie möchten eine Anfrage zum test.com => Sie können nicht.
  • EX 2: Ihre Domain ist Beispiel.com und Sie möchten eine Anfrage an inner.example.com => Sie können nicht können.
  • EX 3: Ihre Domain ist Beispiel.com:80 und Sie möchten eine Anfrage zu Beispiel für.com:81 => Sie können nicht
  • EX 4: Ihre Domain ist Beispiel.com und Sie möchten eine Anfrage an example.com => Sie können.

JavaScript ist aus Sicherheitsgründen durch die "gleiche Ursprungsrichtlinie" begrenzt, damit ein bösartiges Skript keinen Remote -Server annimmt und sensible Daten senden kann.

JSONP ist eine andere Art, JavaScript zu verwenden. Sie stellen eine Anfrage und die Ergebnisse werden in eine Rückruffunktion eingekapselt, die im Client ausgeführt wird. Es ist dasselbe wie das Verknüpfen eines neuen Skript -Tags in den Kopfteil Ihres HTML (Sie wissen, dass Sie hier Skripte aus verschiedenen Domänen laden können).
Um JSONP zu verwenden, muss der Server jedoch ordnungsgemäß konfiguriert werden. Wenn dies nicht der Fall ist, können Sie JSONP nicht verwenden und Sie müssen sich auf einen Server -Side -Proxy (PHP, ASP usw.) verlassen. Es gibt viele Leitfäden zu diesem Thema, nur googeln Sie es!

Andere Tipps

XMLHTTPrequest lässt Sie nicht erreichen localhost:8080 wegen der "gleichen Ursprungsrichtlinie".

Sie können Anfragen von modernen Browsern zulassen, indem Sie Ihrer Antwort einen Kopfball hinzufügen localhost:8080:

Access-Control-Allow-Origin: *

Sie können dies tun, indem Sie Ihrem HTTP-Server Anweisungen hinzufügen oder Header über den serverseitigen Code (PHP, Ruby, ...) hinzufügen.

Lesen Sie mehr über Cross-Origin-Ajax-Anfragen auf https://developer.mozilla.org/en/http_access_control

Wenn Sie Chrome verwenden, ist eine einfache Problemumgehung (nur für Entwicklungszwecke) die Option zu verwenden --disable-web-security.

Fügen Sie in Ihrer Lösung eine global.asax hinzu.

Hinzufügen

HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");

in

protected void Application_BeginRequest(object sender, EventArgs e)
{
}

Wenn Sie Apache verwenden, funktioniert dies: Legen Sie diese in/erstellen Sie eine .htaccess -Datei in Ihr öffentliches Stamm und fügen Sie alle anderen benötigten Dateierweiterungen hinzu.

<FilesMatch "\.(ttf|otf|eot|woff|jpg|png|jpeg|gif|js|json|html|css)$">
  <IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
  </IfModule>
</FilesMatch>

Für die lokale Entwicklung können Sie ein Tool zum Ändern der HTTP -Antwortheader verwenden. Zum Beispiel Charles Kann dies durch das mitgelieferte Umschreiben von Umschreiben tun: Tool umschreiben

Fügen Sie einfach eine neue Regel für die Zieldomäne/den Standort hinzu mit:

Type: Add Header
Where: Response
Replace
     Name: Access-Control-Allow-Origin
     Value: *
Replace All

Hier müssen wir zwei Dinge für Apache HTTP tun

1) In der Datei httpd.config kontrollieren Sie diese Datei

LoadModule headers_module modules/mod_headers.so

2) Fügen Sie diese Zeile unten hinzu.

Header set Access-Control-Allow-Origin "*"

Wenn Sie Google Chrome als Browser verwenden, können Sie die CORS -Erweiterung hinzufügen und aktivieren, es wird das Lochproblem lösen, ohne etwas in Ihrem Code ändern zu müssen

Nicht zu dieser speziellen Frage, aber für alle in dieser Situation mit JQuery ... wird dieser Fehler auch verursacht, wenn Sie versuchen, eine JSONP -Anfrage mit JQuery zu stellen und den Magic Callback -Parameter wegzulassen: callback=?

Wenn Sie aus einem Java-Hintergrund stammen, kann eine mögliche Lösung darin bestehen, ein Servlet zu erstellen, das die Web-Services für Ihr JavaScript aufruft. So etwas wie der folgende Code in der GET-Methode (Your-Choice) ...

JsonElement jelement;
    JsonArray jarray;
    try {
        URL url = new URL("http://rest."YOUR URL"#ba0482");
        URLConnection connection = url.openConnection();
        connection.setDoInput(true);
        InputStream inStream = connection.getInputStream();
        BufferedReader input = new BufferedReader(new InputStreamReader(inStream));

        jelement = new JsonParser().parse(input);

        jarray = jelement.getAsJsonArray();

        response.setContentType("application/json");
        PrintWriter out = response.getWriter();
        out.print(jarray);
        out.flush();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Geben Sie jetzt im JavaScript einfach die URL als Servlet -Name an !!

Ich bin auf dieselbe Fehlermeldung, wenn ich AJAX zum Zugriff auf eine PHP -Seite verwende (JavaScript und PHP -Datei befinden sich beide auf demselben Server).

Der Grund war, dass ich die IP -Adresse als Domäne in meinem JavaScript angegeben habe. Dadurch wurde der Browser angenommen, dass der Anruf in die PHP -Datei auf einem anderen Server liegt.

Eine einfache Lösung, um diese Fehlermeldung zu entfernen. a) Überprüfen Sie die Datei JavaScript und PHP befinden http://www.smartana.co.uk/myjavascript.js) AJAX reflektiert Ihre Server -URL (z. B. z. B. http://www.smartana.co.uk/myserver.php).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top