wake-up-neo.net

In der angeforderten Ressource - ionic 2-Anwendung ist kein Header 'Access-Control-Allow-Origin' vorhanden

Ich erhalte die folgende Fehlermeldung, wenn ich mit einer POST - Anforderung auf meinen lokalen Server zugreifen möchte:

XMLHttpRequest kann http://127.0.0.1:8000/api/v1/users/login nicht laden. Auf der angeforderten Ressource ist kein Header "Access-Control-Allow-Origin" vorhanden. Origin ' http: // localhost: 8100 ' hat daher keinen Zugriff.

Mein Server lässt CORS zu, weil ich es getestet habe, indem ich die Anfrage mit dem Postboten versende, und es funktioniert.

Hier ist mein Code im Frontend:

private headers = new Headers({
    'Access-Control-Allow-Origin': '*',
    'Access-Control-Allow-Methods': 'GET, POST, OPTIONS, PUT, PATCH, DELETE',
    'Access-Control-Allow-Headers': 'X-Requested-With,content-type',
    'Access-Control-Allow-Credentials': true 
});


postLogin(data) {
    console.log(data);
    return new Promise((resolve) => {
        this.http.post(this.api + "users/login", data, {headers: this.headers})
            .map(res => res.json())
            .subscribe(answer => {
                 this.loggedIn = true;
                 this.token = answer.token;
                 resolve(answer);
            });
    });
 }

PS: Ich habe diesen Fehler nicht mit einer GET-Anfrage erhalten.

Ich habe versucht, einen Proxy zu setzen, und es ändert sich nichts :(

Dies ist mein ionic.config.json:

{
  "name": "hardShop",
  "app_id": "",
  "v2": true,
  "TypeScript": true,
  "proxies": [
      {
          "path": "/api",
          "proxyUrl": "http://127.0.0.1:8000"
      }
  ]
}
9

Versuchen Sie es erneut mit diesem Plugin in Ihrem Browser.

Damit können Sie eine beliebige Adresse aus einer beliebigen Quelle anfordern, indem Sie die HTTP/https-Sicherheitsanforderungen oder andere von Browsern festgelegte Einschränkungen umgehen (bekannt als CORS ). Praktisch fügt es den 'Access-Control-Allow-Origin': '*'-Header in die empfangene Antwort ein, bevor an Ihre App weitergeleitet wird.

Bitte beachten Sie, dass es sich hierbei um eine Bandhilfe handelt, die hauptsächlich für die Entwicklung vorgesehen ist. Die Antwort Ihres Servers muss tatsächlich den 'Access-Control-Allow-Origin': '*'-Header haben, vorzugsweise mit einem spezifischeren Wert als *.

Was Sie jetzt tun, hat praktisch keine Auswirkung, da Sie als Client eine Anfrage mit diesem Header an den Server senden, der diese dann umgehend ignoriert. Was zählt ist, dass der Server diesen Header in seiner Antwort an Ihren Client hat.

Postman wendet CORS, soweit ich weiß, nicht an, deshalb ist es vielleicht nicht der Fall.

15
maninak

Dieser Fehler wird angezeigt, wenn Sie eine Http - Verbindung mit einer https dh einer gesicherten Schicht herstellen. __ Ich habe dieselbe Fehlermeldung erhalten, als ich einen Restdienst anrief, der sich auf einem Secured-Server mit Https befand an meine Anwendung, die in localhost ausgeführt wird.

Um dies zu ermöglichen, müssen Sie in Ihrem Browser ein Plugin installieren, das diese Sperre passieren würde.

Wenn Sie Chrome verwenden, installieren SieCORSplugin für Chrome und es wird funktionieren.

1
JEET ADHIKARI

Ein Grund für dieses Problem kann sein (persönliche Erfahrung): Möglicherweise haben Sie die falsche connectionstring für database implementiert.

Ich habe die folgenden zwei Datenbankverbindungen verwendet, eine für den lokalen Speicher und die andere für die Serverspeicherung

const localhost = await mongoose.connect('mongodb://localhost:27017/categories');
const serverhost = await mongoose.connect('mongodb://usename:[email protected]:12345/myapp');

einige verwenden möglicherweise zwei connectionStrings wie ich und deploy den localhost database-connection anstelle von echtem server database-connection und versuchen dann, über database oder client-application auf die postman zuzugreifen.

Stellen Sie sicher, dass Sie deployed die richtige connectionstring haben.

0
WasiF