it-swarm.com.de

Warum zeigt mein $ .ajax "Preflight ist ungültiger Umleitungsfehler" an?

Ich habe den folgenden Code in Postman ausprobiert und er hat funktioniert. Stimmt etwas nicht mit dem Code?

$.ajax({
   url: 'http://api.example.com/users/get',
   type: 'POST',
   headers: {
      'name-api-key':'ewf45r4435trge',
   },
   data: {
      'uid':36,
   },
   success: function(data) {
      console.log(data);
   }
});

Ich habe diesen Fehler in meiner Konsole wie folgt erhalten, bitte beraten.

XMLHttpRequest kann http://api.example.com/users/get Response .__ nicht laden. für Preflight ist ungültig (Weiterleitung)

50

Ich habe dieselbe Fehlermeldung erhalten, als ich versucht hatte, den https-Webdienst als http-Webservice aufzurufen.

e.g when I call url 'http://api.example.com/users/get'
which should be 'https://api.example.com/users/get'

Dieser Fehler wird aufgrund des Umleitungsstatus 302 erzeugt, wenn Sie versuchen, http anstelle von https aufzurufen.

32
Peter T.

Diese Antwort geht über dasselbe (obwohl für eckig) - es ist ein CORS-Problem.

Eine schnelle Lösung besteht darin, jede POST - Anforderung zu ändern, indem Sie einen der 'Content-Type' - Headerwerte angeben, der kein "Preflight" auslöst. Diese Typen sind:

  • application/x-www-form-urlencoded
  • multipart/Formulardaten
  • text/plain

Alles andere löst einen Preflight aus.

Zum Beispiel:

$.ajax({
   url: 'http://api.example.com/users/get',
   type: 'POST',
   headers: {
      'name-api-key':'ewf45r4435trge',
      'Content-Type':'application/x-www-form-urlencoded'
   },
   data: {
      'uid':36,
   },
   success: function(data) {
      console.log(data);
   }
});
24
JoshuaDavid

Der Fehler zeigt an, dass der Preflight eine Umleitungsantwort erhält. Dies kann aus verschiedenen Gründen geschehen. Finden Sie heraus, wohin Sie weitergeleitet werden, um Hinweise zu erhalten, warum dies geschieht. Überprüfen Sie die Netzwerkregisterkarte in den Developer Tools.

Ein Grund, wie @Peter T erwähnt, besteht darin, dass die API wahrscheinlich HTTPS-Verbindungen anstelle von HTTP erfordert und alle Anforderungen über HTTP umgeleitet werden. Der Location-Header, der von der 302-Antwort zurückgegeben wird, würde bedeuten, dass in diesem Fall dieselbe URL mit http in https geändert wurde.

Ein anderer Grund könnte sein, dass Ihr Authentifizierungstoken nicht gesendet wird oder nicht korrekt ist. Die meisten Server sind so eingerichtet, dass sie alle Anforderungen ohne Authentifizierungstoken an die Anmeldeseite umleiten. Überprüfen Sie erneut Ihren Location-Header, um zu sehen, ob Sie hierher gesendet werden, und überprüfen Sie auch, ob der Browser Ihr Auth-Token mit der Anforderung gesendet hat.

Häufig wird ein Server so konfiguriert, dass Anforderungen, die keine Authentifizierungs-Token haben, immer auf die Anmeldeseite umgeleitet werden, einschließlich Ihrer preflight/OPTIONS-Anforderungen. Das ist ein Problem. Ändern Sie die Serverkonfiguration, um OPTIONS-Anforderungen von nicht authentifizierten Benutzern zuzulassen.

6
Planky

Setzen Sie den http-Inhaltstyp im Header und stellen Sie außerdem sicher, dass der Server CORS authentifiziert. So machen Sie es in PHP:

//NOT A TESTED CODE
header('Content-Type: application/json;charset=UTF-8');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: DELETE, HEAD, GET, OPTIONS, POST, PUT');
header('Access-Control-Allow-Headers: Content-Type, Content-Range, Content-Disposition, Content-Description');
header('Access-Control-Max-Age: 1728000');

Bitte beziehen Sie sich auf:

http://www.w3.org/TR/cors/#cross-Origin-request-with-preflight-0

Wie funktioniert der Header von Access-Control-Allow-Origin?

5
Airwind711

Mein Problem war, dass POST -Anfragen nachstehende Schrägstriche '/' benötigen.

5
ehacinom

Ich hatte das gleiche Problem und es hielt mich tagelang durch. Am Ende wurde mir klar, dass meine URL, die auf die App verweist, insgesamt falsch war. __ Beispiel:

URL: 'http://api.example.com/'
URL: 'https://api.example.com/'.

Wenn es sich um http oder https handelt.
Überprüfen Sie die Weiterleitungs-URL und stellen Sie sicher, dass es sich um dasselbe handelt, das Sie weitergeben.

4
Chambah Russell

Ich hatte den gleichen Fehler, obwohl das Problem darin bestand, dass ich einen Tippfehler in der URL hatte

url: 'http://api.example.com/TYPO'

Die API hatte eine Umleitung zu einer anderen Domäne für alle falschen URLs (404-Fehler).

Das Fixieren des Tippfehlers auf die richtige URL hat es für mich behoben.

2
Bolli

Mein Problem wurde durch das genaue Gegenteil von @ehacinom verursacht. Meine von Laravel generierte API hat das abschließende '/' in POST - Anforderungen nicht gemocht. Funktionierte auf localhost einwandfrei, funktionierte jedoch nicht, wenn auf den Server hochgeladen wurde. 

0
user558720