Nginx 構成 クロスドメイン リクエスト Access-Control-Allow-Origin * 詳細な説明

Nginx 構成 クロスドメイン リクエスト Access-Control-Allow-Origin * 詳細な説明

序文

403 クロスオリジン エラーが発生しNo 'Access-Control-Allow-Origin' header is present on the requested resource

1. 解決策

Nginx 構成ファイルで次のパラメータを設定する必要があります。

位置 / { 
 アクセス制御許可オリジン * のヘッダーを追加します。
 add_header アクセス制御許可メソッド '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';

 $request_method = 'OPTIONS'の場合{
  204を返します。
 }
}

上記の設定コードで問題を解決できます。詳しく学習したくない場合は、ここを読んでください =-=

II. 説明

1. アクセス制御許可オリジン

デフォルトでは、サーバーはドメインを越えることはできません。 Nginx サーバーに `Access-Control-Allow-Origin *` を設定すると、サーバーはすべてのリクエスト ソース (Origin) を受け入れることができる、つまりすべてのクロスドメイン リクエストを受け入れることができるようになります。

2. Access-Control-Allow-Headers は次のエラーを防ぐためのものです。

リクエスト ヘッダー フィールド Content-Type は、プリフライト応答の Access-Control-Allow-Headers によって許可されません。

このエラーは、現在のリクエストの Content-Type の値がサポートされていないことを示します。実際、これは私たちが開始した「application/json」タイプのリクエストによって発生しました。ここでは、プリフライト リクエストという概念が関係しています。以下の「プリフライト リクエスト」の概要を参照してください。

3. Access-Control-Allow-Methods は、次のエラーを防ぐためのものです。

プリフライト応答の Access-Control-Allow-Headers では Content-Type は許可されません。

4. OPTIONSに204レスポンスを追加するのは、POSTリクエストを送信してもNginxがアクセスを拒否するというエラーを処理するためです。

「プリフライトリクエスト」を送信する場合、メソッド OPTIONS が必要となるため、サーバーはこのメソッドを許可する必要があります。

3. 事前リクエスト

実際、上記の構成には W3C 標準である CROS (正式名称は Cross-origin resource sharing) が関係しており、これはクロスオリジン リクエストを解決するために提案されました。

クロスオリジン リソース共有 (CORS) 標準では、サーバーがどのオリジンがどのリソースにアクセスできるかを宣言できる一連の HTTP ヘッダー フィールドが追加されます。さらに、仕様では、サーバー データに副作用をもたらす可能性のある HTTP リクエスト メソッド (特に GET 以外の HTTP リクエスト、または特定の MIME タイプの POST リクエスト) の場合、ブラウザーは最初に OPTIONS メソッドを使用してプリフライト リクエストを開始し、サーバーがクロスドメイン リクエストを許可するかどうかを確認する必要があると規定されています。実際の HTTP リクエストは、サーバーが権限を確認した後にのみ開始されます。事前チェック要求への応答で、サーバーはクライアントに ID 資格情報 (Cookie や HTTP 認証関連データを含む) を運ぶ必要があるかどうかを通知することもできます。

実際、Content-Type フィールド タイプが application/json であるリクエストは、上記の特定の MIME タイプを持つ POST リクエストです。CORS によると、次の MIME タイプに属さない Content-Type は事前チェック リクエストです。

アプリケーション/x-www-form-urlencoded
マルチパート/フォームデータ
テキスト/プレーン

したがって、application/json リクエストは、正式な通信の前に「事前チェック」リクエストを追加します。この「事前チェック」リクエストは、ヘッダー情報 Access-Control-Request-Headers: Content-Type: を伝達します。

オプション /api/test HTTP/1.1
出典: http://foo.example
アクセス制御リクエストメソッド: POST
アクセス制御リクエストヘッダー: コンテンツタイプ
...一部省略

サーバーが応答したときに、返されたヘッダー情報に Access-Control-Allow-Headers: Content-Type が含まれていない場合は、デフォルト以外の Content-Type が受け入れられないことを意味します。次のエラーが発生します:

リクエスト ヘッダー フィールド Content-Type は、プリフライト応答の Access-Control-Allow-Headers によって許可されません。

参考記事:

  • Ruan Yifeng [クロスオリジンリソース共有 CORS の詳細な説明]
  • MDN ウェブ ドキュメント [HTTP アクセス制御 (CORS)]

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。

以下もご興味があるかもしれません:
  • jQueryとJSONPを使用してクロスドメインアクセスの問題を簡単に解決する
  • jsonpを使用してクロスドメインの問題を完全に解決する
  • jQuery $.getJSON() クロスドメインリクエスト
  • js クロスドメイン リクエスト データの 3 つの一般的な方法
  • クロスドメインの問題を解決するための js フロントエンドの 8 つのソリューション (最新かつ最も完全)
  • nginx を使用して Cookie のクロスドメイン アクセスを解決する方法
  • 無効な Nginx クロスドメイン設定 Access-Control-Allow-Origin の解決策
  • NginxサーバーでAJAXクロスドメインリクエストを処理するための設定方法の説明
  • Java のクロスドメイン問題の処理の詳細な説明
  • Javaでクロスドメインリクエストを解決する2つの方法
  • vue+Java バックエンドでデバッグするときにクロスドメインの問題を解決する方法
  • CORS を使用して JavaWeb のクロスドメイン リクエストの問題を実装する方法
  • Javaリクエストのクロスドメイン問題の解決の詳細な例
  • JS クロスドメイン (Access-Control-Allow-Origin) フロントエンドおよびバックエンド ソリューションの詳細な説明

<<:  ネイティブJSで禁止すべきメソッドの記述

>>:  mysqld_multi を使用して単一のマシンに複数のインスタンスをデプロイする方法に関する MySQL チュートリアル

推薦する

VueはEchartsを使用して3次元棒グラフを実装します

この記事では、Echartsを使用して3次元棒グラフを実装するVueの具体的なコードを参考までに共有...

フレックスレイアウトとposition:absolute/fixedの競合の詳細な説明

以前、プロジェクトを開発しているときに、flex レイアウトと position:absolute/...

Docker を使用した nextcloud パーソナル ネットワーク ディスクの構築に関するチュートリアル

目次1. はじめに2. 導入環境ツール4. 展開プロセス要約する1. はじめにNextcloud は...

MySQL データベースの基礎を始めるための一般的なコマンドの概要

この記事では、MySQL データベースの基礎を学ぶためによく使用されるコマンドを例を使って説明します...

JS を使用してバイナリ ツリー トラバーサル アルゴリズムのサンプル コードを実装する

目次序文1. バイナリツリー1.1. 二分木の走査1.2. jsを使用してバイナリツリーを表現する1...

JavaScript スネーク実装コード

この記事の例では、参考までに貪欲なスネークを実装するためのJavaScriptの具体的なコードを共有...

nohup /dev/null 2>&1 の使い方の詳しい説明

nohup コマンド: プロセスを実行しており、アカウントからログアウトしてもプロセスが終了しないと...

Mac+IDEA+Tomcat の設定手順

目次1. ダウンロード2. インストールと解凍3. Tomcatを起動する4番目に、インストールが成...

jsで七夕告白連打の効果を実現、jQueryで連打技術を実現

この記事では、jsとjQueryテクノロジーを使用して告白弾幕を実現する方法を紹介します。具体的な内...

VM VirtualBox 仮想マシンのマウント共有フォルダ

一つの環境CentOS 7にVMware Toolsをインストールしてホストの共有フォルダへのアクセ...

ブラウザのキャッシュを防ぐために、js または css の後に ?v= バージョン番号を追加します。

コードをコピーコードは次のとおりです。 <span style="font-size...

3Dカルーセル効果を実現するjs

この記事では、3Dカルーセル効果をjsで実装するための具体的なコードを参考までに共有します。具体的な...

光沢のある輝くウェブサイトデザインの感動的なデザイン例

このコレクションには、あなたのデザインアイデアにインスピレーションを与える、輝いて光沢のある、優れた...

MySQL 8.0.12 解凍版インストールチュートリアル個人テスト!

Mysql8.0.12 解凍版のインストール方法をテストしましたので、ご参考までに1. ダウンロー...

CSS で要素フローティングとクリアフローティングを実装する方法

フローティングの基礎標準ドキュメント フローでは、要素は塊級元素と行內元素の 2 種類に分けられます...