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つの方法のまとめ

推薦する

CSSをインポートする方法に関する詳細な洞察の要約

CSS の開発履歴についてはここでは紹介しません。ブログを書いている理由の 1 つは、フロントエンド...

Linux リモート管理と sshd サービス検証の知識ポイントの詳細な説明

1. SSHリモート管理SSH の定義SSH (Secure Shell) は、主にキャラクタ イン...

ウェブサイトのフロントエンドをエレガントでユーザーにとって魅力的なものにする方法

ウェブフロントエンドのウェブサイトの気質は感情であり、言葉なしでユーザーを魅了できる感情です。では、...

WeChatミニプログラムがシームレスなスクロールを実現

この記事の例では、WeChatアプレットのシームレスなスクロールを実現するための具体的なコードを参考...

webpack イメージを base64 に変換する例

url-loader をダウンロード 糸を追加 -D URLローダー モジュール: { ルール: {...

MySQL 8.0.3 RCがリリースされようとしています。変更点を見てみましょう。

MySQL 8.0.3がリリースされます。新機能を見てみましょうMySQL 8.0.3 は RC ...

HTML リンク アンカー タグと SEO におけるその役割の概要

<a> タグは主に、ハイパーリンクまたはアンカー リンクとも呼ばれるリンクとブックマーク...

mysql バッチで大量のデータを削除する

mysql バッチで大量のデータを削除する1000万件のレコードを持つテーブル(syslogs)があ...

React の 10 個のフックの紹介

目次ReactHook とは何ですか? Reactは現在フックを提供している1. 使用状態2.use...

ユニークインデックスの S ロックと X ロックによる MySQL デッドロック ルーチンの理解

「初心者向けソースコードからの MySQL デッドロック問題の理解」では、MySQL ソースコードを...

MySQL テーブルの読み取り、書き込み、インデックス作成、その他の操作の SQL ステートメントの効率最適化の問題を分析します。

前回は、Explain 実行プランの表示、インデックスの分析など、MySQL での SQL クエリの...

VMware Workstation Pro が Windows で実行されない場合の解決策

国慶節の休暇後、Windows アップデート後に VMware 仮想マシンが開けなくなり、「VMwa...

CN2、GIA、CIA、BGP、IPLC はどういう意味ですか?

CN2ラインとは何ですか? CN2 は、China Telecom Next Carrier Ne...

vuex での mapState の考え方の応用

目次1. マップ方式2. 応用背景:需要開発プロセス中に、一部のインターフェースは、ページに表示する...

MySQL 8.0.24 リリースノートのいくつかの改善点

目次1. 接続管理2. オプティマイザレベルでの改善3. 機能の改善4. パフォーマンススキーマの最...