Kann keine Postanforderung senden, wenn der 'Inhaltstyp' auf 'application / json' gesetzt ist

8

Ich arbeite an einer React-Anwendung und ich verwende Fetch, um eine Anfrage zu senden. Ich habe kürzlich ein Anmeldeformular erstellt und jetzt integriere ich es mit seiner API. Zuvor akzeptierte die API URL-kodierte Daten und alles lief gut. Aber jetzt, da sich die Anforderung geändert hat und die API Daten in JSON akzeptiert, musste ich den Inhaltstyp-Header von "application / x-www-form-urlencoded" in "application / json" ändern. Aber ich bekomme den folgenden Fehler:

  

Die Fetch-API kann Ссылка nicht laden.   Die Antwort auf die Preflight-Anforderung besteht keine Zugriffskontrollprüfung: Nein   Der 'Access-Control-Allow-Origin'-Header ist auf dem angeforderten Header vorhanden   Ressource. Origin Ссылка ist daher nicht erlaubt   Zugriff. Wenn eine undurchsichtige Antwort Ihren Anforderungen entspricht, legen Sie die Anfrage fest   Modus zu 'no-cors', um die Ressource mit deaktivierter CORS zu holen.

Ich habe sogar die 'Access-Control-Allow-Header' in der API gesetzt, funktioniert aber immer noch nicht. Hier ist der relevante Code für die Clientseite:

%Vor%

Und hier ist der relevante API-Code:

%Vor%

Ich kann das Problem wirklich nicht lösen. Jede Art von Hilfe wird geschätzt.

    
Arslan Tariq 17.08.2016, 13:53
quelle

2 Antworten

11

Es stellt sich heraus, dass CORS nur bestimmte Inhaltstypen erlaubt.

  

Die einzigen zulässigen Werte für den Content-Type-Header sind:

     
  • Anwendung / x-www-form-urlencoded
  •   
  • multipart / form-data   
  • text / plain
  •   

Quelle: Ссылка

Um den Inhaltstyp auf "application / json" zu setzen, musste ich einen benutzerdefinierten Inhaltstyp-Header in der API festlegen. Ich habe nur die letzte Kopfzeile entfernt und diese hinzugefügt:

%Vor%

und es funktioniert alles gut.

    
Arslan Tariq 18.08.2016, 07:35
quelle
0

Sie verstoßen gegen die Richtlinie Gleiche Herkunft . Eine Website www.example.com kann möglicherweise niemals Ressourcen von einer anderen Website www.example.net als von sich selbst laden.

Während der Entwicklung muss das manchmal möglich sein. Um dies zu umgehen:

  1. Verschieben Sie Ihren Ursprung entweder nach Ссылка ,
  2. oder verschiebe die API (auf die du zugreifst) auf deinen localhost.
  3. Abgesehen davon gibt es Möglichkeiten, Einschränkungen dieser Art in einigen Browsern (insbesondere Chrome) vorübergehend abzuschalten, deren Methoden bei den nachfolgenden Browser-Updates in der Regel immer mehr Aufwand erfordern. Durchsuchen Sie Google, wie Sie in Ihrer Version des Browsers die übergreifende Ressourcenfreigabe aktivieren können.
  4. Oder, wie die Fehleraufforderung vorschlägt, fügen Sie einen Header ein, der es ermöglicht, dass Anfragen von Nicht-Ursprüngen unterhalten werden. Weitere Informationen finden Sie in Dokumentation für Access Control CORS
Abdul Wasae 18.08.2016 03:46
quelle