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: #🎜🎜 ##🎜 🎜#
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; } }
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.
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:multipart/form-dataapplication/x-www-form-urlencoded
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 ... 省略了一些Nach dem Login kopieren
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!