it-swarm.com.de

In der angeforderten Ressource ist kein 'Access-Control-Allow-Origin'-Header vorhanden. Origin '...' ist daher nicht zugänglich

Ich benutze .htaccess, um URLs neu zu schreiben, und ich habe das HTML-Basis-Tag verwendet, damit es funktioniert.

Wenn ich jetzt versuche, eine Ajax-Anfrage zu stellen, wird der folgende Fehler angezeigt:

XMLHttpRequest kann http://www.example.com/login.php nicht laden. In der angeforderten Ressource ist kein 'Access-Control-Allow-Origin'-Header vorhanden. Origin 'http://example.com' ist daher kein Zugriff gestattet.

134
Th3lmuu90

Verwenden Sie addHeader, anstatt setHeader zu verwenden.

_response.addHeader("Access-Control-Allow-Origin", "*");
_

* in der obigen Zeile ermöglicht access to all domains.


Zum Zulassen von access to specific domain only:

_response.addHeader("Access-Control-Allow-Origin", "http://www.example.com");
_

Überprüfen Sie diese blog post .

170
Jay Patel

Warum wird der Fehler ausgelöst:

Der JavaScript-Code ist durch die Same-Origin-Richtlinie begrenzt. Dies bedeutet, dass Sie von einer Seite unter www.example.com nur (AJAX) -Anfragen an Dienste stellen können, die sich genau unter befinden die gleiche Domain, in diesem Fall genau www.example.com ( nicht example.com - ohne www - oder whatever.example.com).

In Ihrem Fall versucht Ihr Ajax-Code, einen Dienst in http://wordicious.com von einer Seite aus zu erreichen, die sich unter http://www.wordicious.com befindet.

Obwohl sehr ähnlich, sind sie nicht dieselbe Domäne. Und wenn sie sich nicht in derselben Domäne befinden, ist die Anforderung nur erfolgreich, wenn die Antwort des Ziels einen Access-Control-Allow-Origin -Header enthält.

Da Ihre Seite/Ihr Dienst unter http://wordicious.com niemals für die Anzeige eines solchen Headers konfiguriert wurde, wird diese Fehlermeldung angezeigt.

Lösung:

Wie bereits erwähnt, müssen der Ursprung (auf dem sich die Seite mit JavaScript befindet) und das Ziel (auf dem JavaScript versucht zu erreichen) der exakte sein.

Ihr Fall scheint ein Tippfehler zu sein. Es sieht so aus, als ob http://wordicious.com und http://www.wordicious.com tatsächlich derselbe Server/dieselbe Domäne sind. Um das Problem zu beheben, geben Sie das Ziel und den Ursprung gleichermaßen ein: Damit stellen Sie Ajax-Codeanforderungsseiten/-dienste auf http://www.wordicious.com und nicht http://wordicious.com. (Platzieren Sie die Ziel-URL möglicherweise relativ, z. B. '/login.php', ohne die Domain).



Allgemeiner gesagt:

Wenn es sich bei dem Problem nicht um einen Tippfehler handelt, wie er in dieser Frage zu sein scheint, besteht die Lösung darin, den Access-Control-Allow-Origin zur Zieldomäne hinzuzufügen. Das hängt natürlich vom Server/der Sprache hinter dieser Adresse ab. Manchmal reicht eine Konfigurationsvariable im Tool aus. In anderen Fällen müssen Sie die Überschriften selbst durch Code hinzufügen.

145
acdcjunior

Für .NET Server kann dies in web.config wie unten gezeigt konfiguriert werden

 <system.webServer>
   <httpProtocol>
     <customHeaders>
       <add name="Access-Control-Allow-Origin" value="your_clientside_websiteurl" />
     </customHeaders>
   </httpProtocol>
 </system.webServer>

Sagen wir zum Beispiel, wenn die Serverdomäne http://live.makemypublication.com und der Client http://www.makemypublication.com lautet, konfigurieren Sie im Web des Servers .config wie folgt

 <system.webServer>
   <httpProtocol>
     <customHeaders>
       <add name="Access-Control-Allow-Origin" value="http://www.makemypublication.com" />
     </customHeaders>
  </httpProtocol>
 </system.webServer>
61
Naga

Wenn Sie diese Fehlermeldung vom Browser erhalten:

In der angeforderten Ressource ist kein 'Access-Control-Allow-Origin'-Header vorhanden. Origin '…' ist daher nicht zugänglich

wenn Sie versuchen, eine Ajax-POST/GET-Anforderung an einen Remote-Server zu senden, auf den Sie keinen Einfluss haben, vergessen Sie bitte diese einfache Korrektur:

<?php header('Access-Control-Allow-Origin: *'); ?>

Was Sie wirklich tun müssen, insbesondere wenn Sie nur JavaScript für die Ajax-Anforderung verwenden, ist ein interner Proxy, der Ihre Anfrage entgegennimmt und an den Remote-Server weiterleitet.

Führen Sie zunächst in Ihrem JavaScript einen Ajax-Aufruf an Ihren eigenen Server durch, etwa:

$.ajax({
    url: yourserver.com/controller/proxy.php,
    async:false,
    type: "POST",
    dataType: "json",
    data: data,
    success: function (result) {
        JSON.parse(result);
    },
    error: function (xhr, ajaxOptions, thrownError) {
        console.log(xhr);
    }
});

Erstellen Sie dann eine einfache PHP Datei mit dem Namen proxy.php, um Ihre POST Daten zu verpacken und als Parameter an den Remote-URL-Server anzuhängen. Ich gebe Ihnen ein Beispiel, wie ich dieses Problem mit der Expedia-API für die Hotelsuche umgehen kann:

if (isset($_POST)) {
  $apiKey = $_POST['apiKey'];
  $cid = $_POST['cid'];
  $minorRev = 99;

  $url = 'http://api.ean.com/ean-services/rs/hotel/v3/list?' . 'cid='. $cid . '&' . 'minorRev=' . $minorRev . '&' . 'apiKey=' . $apiKey;

  echo json_encode(file_get_contents($url));
 }

Durch das Tun von:

 echo json_encode(file_get_contents($url));

Sie führen nur die gleiche Abfrage durch, aber auf der Serverseite. Danach sollte die Abfrage einwandfrei funktionieren.

21
Nizar B.

Sie müssen dies zu Beginn Ihrer PHP-Seite "login.php" hinzufügen

<?php header('Access-Control-Allow-Origin: *'); ?>
9
shady sherif

sie müssen die Kopfzeilenschlüssel/-werte in die Antwort der Optionsmethode einfügen. Wenn Sie beispielsweise eine Ressource unter http://mydomain.com/myresource haben, schreiben Sie in Ihren Servercode

//response handler
void handleRequest(Request request, Response response) {
    if(request.method == "OPTIONS") {
       response.setHeader("Access-Control-Allow-Origin","http://clientDomain.com")
       response.setHeader("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE,OPTIONS");
       response.setHeader("Access-Control-Allow-Headers", "Content-Type");
    }



}
7
i-systech.com

Die Problemumgehung besteht darin, einen Reverse-Proxy zu verwenden, der auf Ihrem 'Quell'-Host ausgeführt und an Ihren Zielserver weitergeleitet wird, z. B. Fiddler:

Link hier: http://docs.telerik.com/fiddler/configure-fiddler/tasks/usefiddlerasreverseproxy

Oder ein Apache Reverse Proxy ...

3
hzrari

Ändern Sie grundsätzlich die API-Header-Antwort, indem Sie die folgenden zusätzlichen Parameter hinzufügen.

Zugriffssteuerung-Berechtigungsnachweise zulassen: true

Zugriffskontrolle-Erlaube-Herkunft: *

Dies ist jedoch keine gute Lösung, wenn es um die Sicherheit geht

3
Piusha

Fügen Sie dies Ihrer PHP Datei oder Ihrem Hauptcontroller hinzu

header("Access-Control-Allow-Origin: http://localhost:9000");
1
Sam

Gelöst mit untenstehendem Eintrag in httpd.conf

#CORS Issue
Header set X-Content-Type-Options "nosniff"
Header always set Access-Control-Max-Age 1728000
Header always set Access-Control-Allow-Origin: "*"
Header always set Access-Control-Allow-Methods: "GET,POST,OPTIONS,DELETE,PUT,PATCH"
Header always set Access-Control-Allow-Headers: "DNT,X-CustomHeader,Keep-Alive,Content-Type,Origin,Authentication,Authorization,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control"
Header always set Access-Control-Allow-Credentials true

#CORS REWRITE
RewriteEngine On                  
RewriteCond %{REQUEST_METHOD} OPTIONS 
#RewriteRule ^(.*)$ $1 [R=200,L]
RewriteRule ^(.*)$ $1 [R=200,L,E=HTTP_Origin:%{HTTP:Origin}]]
0
Sandeep540

Dieses Problem tritt auf, wenn ich Angular verwende, um einen Datensatz im Django REST Backend zu veröffentlichen. Manchmal gibt es keinen bestimmten Grund für dieses Problem. Überprüfen Sie die Fehlermeldung Ihres Djangos sorgfältig, Sie werden eine Lösung finden.

0
Belter