Ajax リクエストにおけるクロスドメイン問題の原因と解決策

Ajax リクエストにおけるクロスドメイン問題の原因と解決策

1. クロスドメインはどのように形成されるのでしょうか?

現在のページ URL のプロトコル、ドメイン名、またはポートとは異なるプロトコル、ドメイン名、またはポートを持つ URL を要求することを、クロスドメインと呼びます。

クロスドメインにより次のことが起こります:
1. 同一オリジンではないウェブページのCookie、LocalStorage、IndexedDBを読み取ることができない
2. 同一オリジンでないウェブページのDOMにアクセスできない
3. 同じオリジンではないアドレスに AJAX リクエストを送信できない (送信はできるが、ブラウザは応答を拒否する)

2. クロスドメインの根本的な原因

クロスドメインリクエストの根本的な原因は、リクエスト元のブラウザの同一オリジンポリシーであり、クロスドメインリクエストエラーの理由は次のとおりです。ブラウザの同一オリジンポリシー && リクエストがAjaxタイプ && リクエストが実際にクロスドメインである

3. 解決策

jsonp、cors、プロキシ転送の3つの方法を紹介します

1. JSONP

JSONP は、サーバーとクライアント間のクロスオリジン通信によく使用される方法です。最大の特徴は、シンプルさ、適用性、優れた互換性(IE の下位バージョンと互換性がある)です。欠点は、GET リクエストのみをサポートし、POST リクエストはサポートしていないことです。
原則: img、srcipt、link タグの src または href 属性は、同一オリジン ポリシーによって制限されず、リクエストとして使用できます。バックエンドはリクエストを受信すると、コールバック関数を返し、フロントエンドで定義された関数を呼び出して、クロスドメイン リクエストを実装します。

非常に簡単な例を見てみましょう。img タグの src 属性を通じて、ネットワーク アドレスから画像を要求します。これは同一オリジンではない要求ですが、ブラウザーの同一オリジン ポリシーは Ajax 要求に対してのみ有効であるため、要求は影響を受けません。つまり、クロスドメインの問題が発生するのは Ajax リクエストのみです。

2. CORS

CORS は、Cross-Origin Resource Sharing の略です。これは W3C 標準であり、クロスオリジン AJAX リクエストの基本的なソリューションです。

CORS はあらゆるタイプのリクエストを許可します。 CORS を使用してデータにアクセスする場合、クライアントはデータ アクセス ロジックを変更する必要はありません。すべての作業はサーバーとブラウザ間で自動的に実行されます。フロントエンド コードは、通常の Ajax リクエストを送信する場合と変わりません。サーバー側で設定するだけで済みます (バックエンドはアクティブです)。

3. プロキシ転送

ここに画像の説明を挿入

フロントエンド サービスとバックエンド インターフェイス サービスの間に中間プロキシ サービスを設定します。そのアドレスはフロントエンド サーバーのアドレスと同じままです。次に、次の操作を実行します。
この方法では、中間サーバーを介してインターフェース転送を実行し、開発環境でのクロスドメインの問題を解決できます。複雑に思えますが、実際には、vue-cli にはこのテクノロジが組み込まれています。必要に応じて設定するだけで済みます。

vue.config.js の devServer (開発環境) でプロキシ サーバーを構成し、このプロキシ サーバーを介してリクエストを送信します。これは純粋なクロスドメインの問題ではありません。コードは次のとおりです。

モジュール.エクスポート = {
  開発サーバー: {
    // ... 省略 // プロキシ設定 proxy: {
        // リクエストアドレスが /api で始まる場合、プロキシメカニズムがトリガーされます // http://localhost:9588/api/login -> http://localhost:3000/api/login
        '/api': {
          target: 'http://localhost:3000' // プロキシする実際のインターフェースアドレス}
      }
    }
  }
}

baseURL のルート パスは絶対アドレスではなく相対アドレスであることに注意してください。

上記は、Ajax リクエスト フロントエンドにおけるクロスドメイン問題の原因と解決策の詳細な内容です。Ajax クロスドメイン問題の原因と解決策の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • Ajax クロスドメインの問題と解決策の詳細な分析
  • Ajax クロスドメイン問題の解決策の詳細な説明
  • Ajax クロスドメインの問題と解決策 (jsonp、cors)
  • フロントエンドのクロスドメイン問題に対する解決策の概要

<<:  ウェブデザイン研究における XHTML の応用の概要

>>:  Docker - コンテナマウントディレクトリを変更する3つの方法のまとめ

推薦する

MySQL 8.0.13 のインストールと設定方法のグラフィックチュートリアル (Win10 の場合)

MySQL 8.0.13 のインストールと設定方法を皆さんと共有したいと思います。お役に立てれば幸...

CentOS 7にDockerをインストールする

Linuxシステムをお持ちでない場合は、ダウンロードとインストールについてはhttps://www....

JavaScript でピンボール ゲームの Web バージョンを実装する

参考までに、JavaScriptのオブジェクトとメソッドを使用して実装されたWebピンボールゲームを...

NginxにLuaモジュールを追加する方法

luaをインストールする http://luajit.org/download/LuaJIT-2.0...

MySQL ストアド プロシージャの作成と呼び出しの詳細な説明

目次序文ストアドプロシージャ: 1. ストアドプロシージャの作成と呼び出し1. ストアドプロシージャ...

Vue を通じて QR コードスキャン機能を実装する

ヒントこのプラグインは https プロトコルでのみアクセスできます。http プロトコルはうまく機...

YUMを使用してdockerをインストールする方法

次の図に示すように: Centos 7.0以上であれば問題ありません。現在のシステム カーネル バー...

Vueコンポーネントの作成方法と使用方法を説明する記事

目次1. コンポーネントとは何ですか? 2. グローバルコンポーネントを作成する方法1 1. Vue...

IE6のmin-widthとmin-heightと互換性を持たせる簡単な方法

ウェブサイトがワイドスクリーンの場合、ブラウザ ウィンドウを左右にドラッグすると、ウェブサイトの幅が...

Win7 インストール MySQL 5.6 チュートリアル図

目次1. ダウンロード2. インストール3. my.ini ファイルを設定する(デフォルトのエンコー...

JSはショッピングカート内の商品の合計金額の計算を実現します

JSはショッピングカート内の商品の合計金額を計算して参考とします。具体的な内容は以下のとおりです。質...

この記事はVueのライフサイクルを理解するのに役立ちます

目次1. beforeCreate & created 2. マウント前とマウント済み3. ...

タグ li はブロックレベル要素ですか?

なぜ高さを設定できるのでしょうか。<h1 /> などの要素とは異なり、「セミインライン」...

文字列の最初の文字を取得してテキストアイコン機能を実現する純粋なCSS

CSS でテキストアイコンを実装する方法 /*アイコンスタイル*/ .nav-icon-norma...

MySQL 8.0.11 のインストールと設定方法のグラフィックチュートリアル

MySQL 8.0のインストールと設定方法は参考までに。具体的な内容は以下のとおりです。ダウンロード...