2015-07-07 15 views
26

Ich rufe diese Funktion von meinem asp.net-Formular und erhalten folgenden Fehler auf der Firebug-Konsole beim Aufruf von Ajax.CORS-Header 'Access-Control-Allow-Origin' fehlt

Ursprungsübergreifende Anforderung blockiert: Die Richtlinie für gleiche Herkunft ermöglicht das Lesen der Remote-Ressource unter http://anotherdomain/test.json nicht. (Grund: CORS-Header 'Access-Control-Allow-Origin' fehlt).

var url= 'http://anotherdomain/test.json'; 
     $.ajax({ 
      url: url, 
      crossOrigin: true, 
      type: 'GET', 
      xhrFields: { withCredentials: true }, 
      accept: 'application/json' 
     }).done(function (data) { 
      alert(data);     
     }).fail(function (xhr, textStatus, error) { 
      var title, message; 
      switch (xhr.status) { 
       case 403: 
        title = xhr.responseJSON.errorSummary; 
        message = 'Please login to your server before running the test.'; 
        break; 
       default: 
        title = 'Invalid URL or Cross-Origin Request Blocked'; 
        message = 'You must explictly add this site (' + window.location.origin + ') to the list of allowed websites in your server.'; 
        break; 
      } 
     }); 

Ich habe alternative Art und Weise getan, aber noch nicht in der Lage, die Lösung zu finden.

Hinweis: Ich habe keine Serverrechte, um serverseitige (API/URL) Änderungen vorzunehmen.

+1

Does 'anotherdomain' Unterstützung JSONP? Andernfalls lesen Sie diesen doppelten Thread http://stackoverflow.com/questions/20035101/no-access-control-allow-origin-header-is-present-on-the-requested-resource?rq=1 –

+0

@PatrickMurphy, nein ' anotherdonain' unterstützt CORS nicht. Ich erhalte 'title = 'Ungültige URL oder Cross-Origin-Anfrage blockiert'; –

+0

jsonp ermöglicht es Ihnen, einen Callback-Parameter irgendeiner Art zu übergeben, der es Ihnen erlaubt, die Json-Wrapped-Daten ohne 'cors' zu empfangen. –

Antwort

22

Dies geschieht im Allgemeinen, wenn Sie versuchen, auf die Ressourcen einer anderen Domäne zuzugreifen.

Dies ist eine Sicherheitsfunktion, um zu verhindern, dass jeder frei auf Ressourcen dieser Domäne zugreift (auf die zugegriffen werden kann, um beispielsweise genau die gleiche Kopie Ihrer Website auf einer Piraten-Domain zu haben).

Wenn der Code die Anfrage sendet, erhalten Sie in Ihrer Browser-Konsole einen "200 OK" -Antwortcode, was bedeutet, dass auf die Ressource zugegriffen wird, aber nicht das Recht, diese Ressource zu teilen. Dies geschieht, indem "Access-Control-Allow-Origin" nicht zugelassen wird.

, das ändern, können Sie dies in der .htaccess der angeforderten Domain-Datei schreiben müssen (notyourdomain.com):

<IfModule mod_headers.c> 
    Header set Access-Control-Allow-Origin "*" 
    </IfModule> 

Eine andere Lösung ist die Datei manuell auf Ihren Server/Domain zu kopieren :)

Frieden und Code;)

+0

Hallo @ Sébastien Garcia-Roméo, ich habe das zu meiner .htaccess hinzugefügt, aber ich bekomme immer noch die gleiche "Cross-Origin Anfrage blockiert: Die gleiche Herkunft Richtlinie verbietet das Lesen der Remote-Ressource bei ..." Problem. Weißt du, was das sein könnte? Vielen Dank – Jeff

+0

Dies kann eine Menge Dinge sein ... die beste wäre, die angeforderten Medien auf dem gleichen Server zu haben, wenn möglich ... –

+0

Jeff: Stellen Sie sicher, dass das Modul mod_headers in Ihrer Serverkonfiguration aktiviert ist. Wie Sie bemerkt haben, unterliegt die Antwort von gkubed einem IfModule-Test. In der Tat ist der beste Weg, es nicht innerhalb dieses Tests zu wickeln, so dass ein Fehler auftritt, wenn dieses Modul auf Ihrem Server nicht verfügbar ist. –

6

in Ihrer ajax-Anforderung, und fügte hinzu:

dataType: "jsonp", 

nach Zeile:

type: 'GET', 

dieses Problem ..

Hoffnung diese Hilfe Sie

als gegeben
+4

Dies ist keine garantierte Lösung und funktioniert * nur *, wenn die empfangende Domäne für die Antwort im JSONP-Format konfiguriert ist. Wenn in der Domäne kein CORS aktiviert ist, ist es sehr unwahrscheinlich, dass JSONP funktioniert. Beachten Sie auch, dass JSON und JSONP nicht austauschbar sind. –

+0

Ich habe dieses Problem mit Wikipedia und es ist die einzige Lösung, die funktioniert !!! – ChaosPredictor

+2

JSONP funktioniert nur für GET-Methode/Typ. :) –

2

Sie müssen Ihren Server-seitigen Code ändern, Ihr unten

public class CorsResponseFilter implements ContainerResponseFilter { 
@Override 
public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) 
    throws IOException { 
     responseContext.getHeaders().add("Access-Control-Allow-Origin","*"); 
     responseContext.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT"); 

    } 
}