Nginx-Konfiguration domänenübergreifende Anforderung Access-Control-Allow-Origin * detaillierte Erklärung

Nginx-Konfiguration domänenübergreifende Anforderung Access-Control-Allow-Origin * detaillierte Erklärung

Vorwort

Wenn ein 403-Cross-Origin-Fehler auftritt No 'Access-Control-Allow-Origin' header is present on the requested resource :

1. Lösung

Sie müssen nur die folgenden Parameter in der Nginx-Konfigurationsdatei konfigurieren:

Standort / { 
 add_header Zugriffskontrolle-Origin zulassen *;
 add_header Zugriffssteuerungs-Zulassungsmethoden 'GET, POST, OPTIONS';
 add_header Zugriffskontrolle-Header zulassen 'DNT, X-Mx-ReqToken, Keep-Alive, User-Agent, X-Requested-With, If-Modified-Since, Cache-Control, Inhaltstyp, Autorisierung';

 if ($request_method = 'OPTIONEN') {
  Rückgabe 204;
 }
}

Der obige Konfigurationscode kann das Problem lösen. Wenn Sie ihn nicht eingehend studieren möchten, lesen Sie einfach hier =-=

II. Erläuterung

1. Zugriffskontrolle-Ursprung zulassen

Standardmäßig ist es Servern nicht gestattet, Domänen zu überschreiten. Nachdem Sie „Access-Control-Allow-Origin*“ für den Nginx-Server konfiguriert haben, bedeutet dies, dass der Server alle Anforderungsquellen (Origin) akzeptieren kann, d. h. alle domänenübergreifenden Anforderungen akzeptieren kann.

2. Access-Control-Allow-Headers soll folgende Fehler verhindern:

Der Content-Type des Anforderungsheaderfelds wird von Access-Control-Allow-Headers in der Preflight-Antwort nicht zugelassen.

Dieser Fehler zeigt an, dass der Wert des aktuellen Anforderungsinhaltstyps nicht unterstützt wird. Tatsächlich wurde es durch die von uns initiierte Anfrage vom Typ „application/json“ verursacht. Hier ist ein Konzept beteiligt: ​​Preflight-Anforderung. Bitte lesen Sie die Einführung zu „Preflight-Anforderung“ weiter unten.

3. Access-Control-Allow-Methods soll folgende Fehler verhindern:

Der Inhaltstyp wird von Access-Control-Allow-Headern in der Preflight-Antwort nicht zugelassen.

4. Das Hinzufügen einer 204-Antwort zu OPTIONS dient zur Behandlung des Fehlers, dass Nginx beim Senden einer POST-Anforderung immer noch den Zugriff verweigert

Beim Senden einer „Preflight-Anfrage“ ist die Methode OPTIONS erforderlich, daher muss der Server diese Methode zulassen.

3. Preflight-Anfrage

Tatsächlich beinhaltet die obige Konfiguration einen W3C-Standard: CROS, der vollständige Name steht für Cross-Origin Resource Sharing, der zur Lösung von Cross-Origin-Anfragen vorgeschlagen wurde.

Der CORS-Standard (Cross-Origin Resource Sharing) fügt eine Reihe von HTTP-Headerfeldern hinzu, mit denen Server angeben können, welche Ursprünge Zugriff auf welche Ressourcen haben. Darüber hinaus erfordert die Spezifikation, dass bei HTTP-Anforderungsmethoden, die Nebenwirkungen auf Serverdaten haben können (insbesondere andere HTTP-Anforderungen als GET oder POST-Anforderungen mit bestimmten MIME-Typen), der Browser zunächst mit der Methode OPTIONS eine Preflight-Anforderung initiieren muss, um festzustellen, ob der Server die domänenübergreifende Anforderung zulässt. Erst nachdem der Server die Berechtigung bestätigt hat, wird die eigentliche HTTP-Anfrage initiiert. In der Antwort auf die Vorabprüfungsanforderung kann der Server dem Client auch mitteilen, ob er Identitätsnachweise (einschließlich Cookies und Daten zur HTTP-Authentifizierung) mitführen muss.

Tatsächlich ist die Anfrage, deren Content-Type-Feldtyp application/json ist, die POST-Anfrage mit bestimmten oben genannten MIME-Typen. Laut CORS ist ein Content-Type, der nicht zu den folgenden MIME-Typen gehört, eine Pre-Check-Anfrage:

Anwendung/x-www-form-urlencoded
mehrteilige/Formulardaten
Text/Plain

Daher fügt die Anwendungs-/JSON-Anforderung vor der formellen Kommunikation eine „Pre-Check“-Anforderung hinzu. Diese „Pre-Check“-Anforderung enthält die Header-Informationen Access-Control-Request-Headers: Content-Type:

OPTIONEN /api/test HTTP/1.1
Herkunft: http://foo.example
Zugriffskontroll-Anforderungsmethode: POST
Access-Control-Request-Header: Inhaltstyp
... einige weggelassen

Wenn bei der Antwort des Servers die zurückgegebenen Header-Informationen nicht „Access-Control-Allow-Headers: Content-Type“ enthalten, bedeutet dies, dass ein nicht standardmäßiger Content-Type nicht akzeptiert wird. Der folgende Fehler tritt auf:

Der Content-Type des Anforderungsheaderfelds wird von Access-Control-Allow-Headers in der Preflight-Antwort nicht zugelassen.

Referenzartikel:

  • Ruan Yifeng [Detaillierte Erklärung des Cross-Origin-Resource-Sharing-CORS]
  • MDN-Webdokumente [HTTP-Zugriffskontrolle (CORS)]

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • Verwenden Sie jQuery und JSONP, um das Problem des domänenübergreifenden Zugriffs einfach zu lösen
  • Verwenden Sie jsonp, um domänenübergreifende Probleme perfekt zu lösen
  • jQuery $.getJSON() domänenübergreifende Anforderung
  • 3 gängige Methoden zum domänenübergreifenden Anfordern von Daten in JS
  • 8 Lösungen für das JS-Frontend zur Lösung domänenübergreifender Probleme (neueste und umfassendste)
  • So verwenden Sie Nginx, um den domänenübergreifenden Zugriff auf Cookies zu lösen
  • Lösung für ungültige Nginx-Cross-Domain-Einstellung Access-Control-Allow-Origin
  • Erläuterung der Konfigurationsmethode zur Verarbeitung von AJAX-Cross-Domain-Anfragen im Nginx-Server
  • Detaillierte Erläuterung der domänenübergreifenden Problembehandlung in Java
  • Zwei Möglichkeiten zum Lösen domänenübergreifender Anforderungen in Java
  • So lösen Sie domänenübergreifende Probleme beim Debuggen mit Vue+Java-Backend
  • So verwenden Sie CORS zum Implementieren domänenübergreifender Anforderungsprobleme in JavaWeb
  • Detailliertes Beispiel einer Lösung für das domänenübergreifende Java-Anforderungsproblem
  • Detaillierte Erläuterung der JS Cross-Domain (Access-Control-Allow-Origin) Front-End- und Back-End-Lösungen

<<:  Schreiben von Methoden, die in nativem JS verboten sein sollten

>>:  MySQL-Tutorial zum Bereitstellen mehrerer Instanzen auf einer einzigen Maschine mit mysqld_multi

Artikel empfehlen

HTML-Grundlagen: HTML-Inhaltsdetails

Beginnen wir mit dem Körper: Wenn Sie eine Webseit...

Neue Ideen zur Zeitformatierung in JavaScript toLocaleString()

Inhaltsverzeichnis 1. Konventionelle Ideen zur Ze...

Überlegungen zum Rasterdesign von Webseiten

<br />Ursprüngliche Adresse: http://andymao....

Installationsprozess der React Native-Umgebung

React-Native-Installationsprozess 1.npx react-nat...

Abfrage der Daten des Tages vor dem aktuellen Zeitintervall in MySQL

1. Hintergrund In tatsächlichen Projekten stoßen ...

Detaillierte Erklärung der Destrukturierungszuweisung in JavaScript

Inhaltsverzeichnis Konzept Array-Destrukturierung...

Was macht der legendäre VUE-Syntax-Sugar?

Inhaltsverzeichnis 1. Was ist syntaktischer Zucke...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 8.0.16 winx64

Ich habe erst vor Kurzem angefangen, mich mit Dat...

JavaScript realisiert den Warteschlangenstrukturprozess

Inhaltsverzeichnis 1. Warteschlangen verstehen 2....

Vue implementiert WebSocket-Kundendienst-Chatfunktion

In diesem Artikel wird hauptsächlich die Implemen...