Heim >Betrieb und Instandhaltung >Nginx >Nginx-Konfigurationsfehler bei domänenübergreifender Anforderung Access-Control-Allow-Origin * So lösen Sie ihn

Nginx-Konfigurationsfehler bei domänenübergreifender Anforderung Access-Control-Allow-Origin * So lösen Sie ihn

WBOY
WBOYnach vorne
2023-05-11 23:10:125865Durchsuche

Vorwort

Wenn ein domänenübergreifender 403-Fehler auftritt no 'access-control-allow-origin' header is present on the requested resource, müssen Sie die Antwortheader-Parameter für den Nginx-Server konfigurieren: #🎜🎜 ##🎜 🎜#

1. Lösung


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

location / { 
 add_header access-control-allow-origin *;
 add_header access-control-allow-methods 'get, post, options';
 add_header access-control-allow-headers 'dnt,x-mx-reqtoken,keep-alive,user-agent,x-requested-with,if-modified-since,cache-control,content-type,authorization';

 if ($request_method = 'options') {
  return 204;
 }
}
#🎜🎜 #Der obige Konfigurationscode Das Problem ist gelöst. Wenn Sie sich nicht eingehend damit befassen möchten, schauen Sie einfach hier nach =-=


2. Erklärung

#🎜🎜 #
1. access-control-allow-origin

Der Server darf keine Domäne überschreiten Standard. Nach der Konfiguration von „access-control-allow-origin *“ für den Nginx-Server bedeutet dies, dass der Server alle Anforderungsquellen (Origin) akzeptieren kann, d. h. alle domänenübergreifenden Anforderungen akzeptiert.

2. Access-Control-Allow-Header sollen die folgenden Fehler verhindern:

#🎜 🎜#Der Inhaltstyp des Anforderungsheaderfelds ist von Access-Control-Allow-Headern in der Preflight-Antwort nicht zulässig.

Dieser Fehler weist darauf hin, dass der Wert des aktuellen Anforderungsinhaltstyps nicht zulässig ist unterstützt. Tatsächlich wurde es dadurch verursacht, dass wir eine Anfrage vom Typ „application/json“ initiierten. Dabei handelt es sich um ein Konzept: Preflight-Anfrage. Bitte lesen Sie die Einführung zu „Preflight-Anfrage“.

3. Zugriffskontroll-Zulassungsmethoden sollen die folgenden Fehler verhindern:

content Typ ist durch Access-Control-Allow-Header in der Preflight-Antwort nicht zulässig.

4. Fügen Sie eine 204-Rückkehr zu den Optionen hinzu, um Nginx zu verarbeiten, wenn Sie eine Post-Anfrage senden. Immer noch Zugriff Fehler verweigert

Beim Senden einer „Preflight-Anfrage“ müssen Sie Methodenoptionen verwenden, daher muss der Server diese Methode zulassen.
3. Preflight-Anfrage

Tatsächlich handelt es sich bei der obigen Konfiguration um einen W3C-Standard: cros, der vollständige Name Es ist Cross-Origin-Ressourcenfreigabe, die zur Lösung domänenübergreifender Anfragen vorgeschlagen wurde.
Der Cross-Origin-Resource-Sharing-Standard (Cors) fügt einen neuen Satz von HTTP-Header-Feldern hinzu, die es dem Server ermöglichen, zu deklarieren, welche Ursprungsseiten die Berechtigung haben, auf welche Ressourcen zuzugreifen. Darüber hinaus erfordert die Spezifikation, dass der Browser für HTTP-Anfragemethoden, die Nebenwirkungen auf Serverdaten haben können (insbesondere andere HTTP-Anfragen als Get oder Post-Anfragen mit bestimmten MIME-Typen), zunächst die Optionsmethode verwenden muss, um eine Preflight-Anfrage zu initiieren (Preflight-Anfrage), um zu erfahren, ob der Server die domänenübergreifende Anfrage zulässt. Nachdem der Server die Erlaubnis bestätigt hat, initiiert er die eigentliche http-Anfrage. Bei der Rückgabe der Preflight-Anfrage kann der Server den Client auch darüber informieren, ob er Identitätsanmeldeinformationen (einschließlich Cookies und HTTP-Authentifizierungsdaten) mit sich führen muss.

Tatsächlich handelt es sich bei der Anfrage mit dem Inhaltstyp-Feldtyp application/json um die oben erwähnte Post-Anfrage mit bestimmten Mime-Typen, die Cors vorschreibt nicht Diejenigen, die zu den folgenden Mime-Typen gehören, sind alle Preflight-Anfragen:


application/x-www-form-urlencoded
multipart/form-data

text/plain # 🎜🎜#

Die Anwendung/JSON-Anfrage fügt also vor der formellen Kommunikation eine „Preflight“-Anfrage hinzu. Diese „Preflight“-Anfrage bringt die Header-Informationen zur Zugriffskontrollanforderung. headers: content-type:

options /api/test http/1.1
origin: http://foo.example
access-control-request-method: post
access-control-request-headers: content-type
... 省略了一些

Wenn der Server antwortet und die zurückgegebenen Header-Informationen keine access-control-allow-headers: content-type enthalten, bedeutet dies, dass nicht standardmäßige Header nicht akzeptiert werden . Inhaltstyp. Das heißt, der folgende Fehler tritt auf:

Der Inhaltstyp des Anforderungsheaderfelds ist durch Zugriffskontroll-Zulassungsheader in der Preflight-Antwort nicht zulässig.

Das obige ist der detaillierte Inhalt vonNginx-Konfigurationsfehler bei domänenübergreifender Anforderung Access-Control-Allow-Origin * So lösen Sie ihn. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen