Vue+SpringBoot のフロントエンドとバックエンドの分離におけるクロスドメインの問題

Vue+SpringBoot のフロントエンドとバックエンドの分離におけるクロスドメインの問題

フロントエンドとバックエンドを分離した開発では、フロントエンドがバックエンドの API を呼び出してコンテンツを表示する必要があります。フロントエンドとバックエンドの開発が同じホスト上にある場合、ブラウザの相同性ポリシーの制限により、クロスドメインの問題 (異なるプロトコル、ドメイン名、ポート番号など) が発生し、API インターフェイスを正常に呼び出すことができず、開発に不便が生じます。

APIリクエストのカプセル化

'axios' から axios をインポートします

//axios.create は axios インスタンスを作成し、インスタンスの設定を書き込みます。インスタンスを介して送信される後続のすべてのリクエストは、現在の設定の対象となります。const $http = axios.create({
    ベースURL: ''、
    タイムアウト: 1000、
    //ヘッダー: {'X-Custom-Header': 'foobar'}
});

// リクエストインターセプターを追加 $http.interceptors.request.use(function (config) {
    // リクエストを送信する前に何かを実行します return config;
}, 関数 (エラー) {
    // リクエストエラーに対して何かを実行します。 return Promise.reject(error);
});

// レスポンスインターセプターを追加 $http.interceptors.response.use(function (response) {
    // レスポンスデータで何かを行う return response.data; // レスポンスデータのデータ部分を返す }, function (error) {
    // エラーに対して何らかの処理を実行します。 return Promise.reject(error);
});

デフォルトの$httpをエクスポートする

API呼び出し関数

エクスポートconst getCourses = () => {
$http.get('http://localhost:8080/teacher/courses') を返します
} 

この例では、フロントエンドはポート 8081 を使用し、バックエンドはポート 8080 を使用し、フロントエンドは API を呼び出してデータを要求できません。

Postmanは、このAPIインターフェースが正常であることをテストします

相同性問題をどうやって解決するか?

1. vueルートディレクトリに新しいvue.config.jsファイルを作成し、設定します。

vue.config.js ファイル

モジュール.エクスポート = {
    開発サーバー: {
        host: 'localhost', //ホスト番号 port: 8081, //ポート番号 open: true, //ブラウザプロキシを自動的に開く: {
            '/api': {
                target: 'http://localhost:8080/', //インターフェースドメイン名の変更Origin: true, //クロスドメインですか? ws: true, //Websocketのプロキシですか?
                secure: true, //https インターフェースかどうか pathRewrite: { //パスをリセット '^/api': '/'
                }
            }
        }
    }
};

2. APIリクエストを変更する

API呼び出し関数

エクスポートconst getCourses = () => {
  $http.get('/api/teacher/courses') を返します
}

ここでは、vue.config.jsがインターフェースのドメイン名を設定するので、ここのURLには残りを記述するだけで済みます。

URL 本文

http://localhost:8080/teacher/courses

ただし、ここではプロキシを使用しているため、残りの部分(つまり「/teacher/courses」)の前に「/api」を追加して「/api/teacher/courses」を形成します。

この時点で、クロスドメイン問題は解決され、フロントエンドはバックエンドインターフェースからデータを取得して表示することができます。

問題は解決しました!

Vue+SpringBoot のフロントエンドとバックエンドの分離におけるクロスドメイン問題についての記事はこれで終わりです。より関連性の高い vue SpringBoot フロントエンドとバックエンドの分離のクロスドメインコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き閲覧してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • SpringBoot+Vue+JWTのフロントエンドとバックエンドを分離したログイン認証の詳細な手順
  • Springboot+VUEフロントエンドとバックエンドの分離による防疫プラットフォームJAVAの実現
  • Vue と Springboot を組み合わせてユーザーリストの単一ページを実現 (フロントエンドとバックエンドの分離)
  • Vueのフロントエンドシステムとフロントエンドとバックエンドの分離の詳細な説明

<<:  新しいユーザーを作成し、MySQLに権限を付与する最も簡単な方法

>>:  Linux jdk のインストールと環境変数の設定チュートリアル (jdk-8u144-linux-x64.tar.gz)

推薦する

Vue + 要素の動的複数ヘッダーと動的スロット

目次1. 需要2. 効果3. すべてのコード1. 需要ユーザーが自分でテーブルを構成できるようになり...

VSCode+CMake+Clang+GCC 環境構築チュートリアル (Win10 の場合)

大学院入試に備えて、C/C++ を使って基本的なデータ構造とアルゴリズムを実装する予定です。アルゴリ...

Vue が scss (mixin) をグローバルに導入

目次1. ミックスイン.scss 2. 単一ファイルの使用3. グローバルマウント3.1 依存関係の...

crontab の実行結果を電子メールでユーザーに通知する方法

症状Centos7 ホストに crontab タスクを設定しましたが、時間が来るとメールを実行して「...

Vue3.0 は虫眼鏡効果のケーススタディを実装します

達成される効果は、固定ズームが 2 倍になり、マウスが左側の画像領域に入るとマスク レイヤーが表示さ...

Baota LinuxパネルにFTP接続できない問題の解決方法の詳細な説明

Alibaba Cloud Server を使用している場合は、セキュリティ グループ設定でポート ...

ウェブサイトに天気予報を挿入する方法

天気予報をウェブサイトに挿入すると、次のような効果が得られます。次のコードを挿入する必要があります:...

UbuntuにMySQLをインストールするときにデフォルトのパスワードを変更する詳細な手順

ステップ1: ディレクトリに入ります: cd /etc/mysql、debian.cnfファイルを表...

HTML テーブル タグ チュートリアル (31): セルの幅と高さの属性 WIDTH、HEIGHT

デフォルトでは、セルの幅と高さはコンテンツに応じて自動的に調整されますが、セルの幅と高さを手動で設定...

MYSQL ローカルインストールと問題解決

序文この記事はかなり詳細で、少し面倒です。他のチュートリアル ドキュメントでは多くの手順が省略されて...

tbodyタグの魔法はテーブルコンテンツの表示を高速化します

他の人のウェブページを保存して見たことがあると思いますが、特にdwで開くと、多くのウェブページに&l...

MySQL ユーザー変数と set ステートメントの例の詳細な説明

目次1 ユーザー変数の概要2 ユーザー変数の定義3 ユーザー変数の使用3.1 セットを通した例3.2...

MySQL サービスを完全に削除する方法 (レジストリをクリーンアップする)

序文あるプロジェクトの実行可能ファイルをインストールすると、MySQL 自体をインストールできるよう...

高可用性 Web クラスターを実装するための Keepalived+Nginx+Tomcat サンプル コード

高可用性 Web クラスターを実現する Keepalived+Nginx+Tomcat 1. Ngi...

レスポンシブウェブデザインを実現するためにIEでCSS3メディアクエリをサポートする

今日の画面解像度は、320 ピクセル (iPhone) ほど小さいものから、2560 ピクセル以上 ...