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

So laden Sie das JAR-Paket über die Webseite auf Nexus hoch

Wie lädt man das JAR-Paket in ein privates Lager ...

Verwenden von js zum Implementieren eines einfachen Lichtschaltercodes

Körperteil: <button>Licht ein-/ausschalten&...

Entwerfen Sie einen Datensammler mit Vue

Inhaltsverzeichnis Szenario Kernthemen Statusüber...

Erste Schritte mit dem Animieren von SVG-Pfadstrichen mit CSS3

Ohne auf JavaScript angewiesen zu sein, wird rein...

js Canvas realisiert zufällige Partikeleffekte

In diesem Artikelbeispiel wird der spezifische Co...

Detaillierte Beispiele für die Ausführung von Zabbix-Remotebefehlen

Inhaltsverzeichnis eins. Umfeld zwei. Vorsichtsma...

Lösung zum Einfügen eines Formulars mit einer Leerzeile oben und unten

Ich weiß nicht, ob Ihnen beim Erstellen einer Webs...

Umfassendes Verständnis des MySQL-Protokolls für langsame Abfragen

Inhaltsverzeichnis Was ist das Protokoll langsame...

Detaillierte Erklärung zum Lay-Loading von JavaScript

Inhaltsverzeichnis Lazy Loading CSS-Stile: HTML-T...

CSS3-Eigenschaft line-clamp steuert die Verwendung von Textzeilen

Beschreibung: Begrenzen Sie die Anzahl der Textze...

Docker erstellt Python Flask+ Nginx+Uwsgi-Container

Installieren Sie Nginx Ziehen Sie zuerst das Cent...

Mysql 5.6.37 Winx64-Installation Dual-Version MySQL-Hinweise

Wenn MySQL Version 5.0 bereits auf dem Computer v...

Details der benutzerdefinierten Vue-Anweisung

Inhaltsverzeichnis 1. Hintergrund 2. Lokale benut...