序文最近、純粋なフロントエンドの vue プロジェクトを書いていたときに、axios がローカル リソースを要求したときに access が 404 を報告するという問題が発生しました。これは私にとって非常に不快なことです。情報を確認したところ、クロスドメインの問題であることが判明しました。 通常の開発におけるクロスドメインの問題には多くの解決策があります。最も一般的なのは、バックエンドが応答ヘッダーを変更することです。しかし、フロントエンドはリバースプロキシを通じて解決することもできます。次回このようなミスが起きないように、記録してまとめておきましょう。 それでは、復習して解決してみましょう。 1. クロスドメインの問題はなぜ発生するのでしょうか?クロスドメイン: ブラウザが、あるドメイン名の Web ページのリソースを別のドメイン名から要求する場合、ドメイン名、ポート、またはプロトコルが異なると、クロスドメインになります。 フロントエンドとバックエンドの分離モードでは、フロントエンドとバックエンドのドメイン名が一致せず、クロスドメインアクセスの問題が発生してしまいます。クロスドメイン問題は、JavaScript の同一生成元ポリシーに起因します。つまり、プロトコル + ホスト名 + ポート番号 (存在する場合) が同じ場合にのみ相互アクセスが許可されます。つまり、JavaScript は自身のドメインの下にあるリソースにのみアクセスして操作することができ、他のドメインの下にあるリソースにアクセスして操作することはできません。クロスドメインの問題は、JS と ajax に発生します。 Axios は Promise を介して Ajax テクノロジーをカプセル化したものなので、クロスドメインの問題もあります。 2. 解決策ここでは、このマシンを使用して、テスト用に 2 つの異なるポートを開きます。 未処理のクロスドメイン エラー クロスドメイン処理要求はありません。 axios.get('http://localhost:8080/getData') .then(res => { コンソール.log(res) }) .catch(エラー => { コンソールエラー(err); }) クロスオリジンリソース共有 (CORS)フロントエンドは、クロスドメインの問題を解決するためにリバースプロキシを実行します。概略図は以下のとおりです。 1. vueプロジェクトのポートは8081です 2. コンピューターのポート 8080 を開き、 3. プロキシを設定する 1. vue2.0の場合 config フォルダー内の index.js ファイルを変更し、proxyTable に次のコードを追加します。 プロキシテーブル: { '/apis': { target: 'http://localhost:8080/', // クロスドメインを解決するドメイン名 interfacesecure:false, // https インターフェースの場合は、このパラメータを設定する必要がありますchangeOrigin: true, // インターフェースがクロスドメインの場合は、このパラメータを設定する必要がありますpathRewrite: { '^/apis': '' // パスの書き換え} }, }, 次に、axiosリクエストにこれを記述します axios.get('apis/getData') .then(res => { コンソール.log(res) }) .catch(エラー => { コンソールエラー(err); }) 分析: ターゲットの後に、リクエストする必要のある URL のパブリック部分が続き、これをプロキシするために このプレフィックスはカスタマイズ可能で、proxyTable はオブジェクトなので、複数のプロキシを設定できます。 クロスドメインソリューション 2. vue3.0の場合 vue-cli3 スキャフォールディングが構築された後、プロジェクトディレクトリに vue.config.js ファイルが存在しないため、手動で作成する必要があります。 新しい vue.config.js を作成し、次の情報を構成して問題を解決します。 モジュール.エクスポート = { 開発サーバー: { プロキシ: { '^/api': { target: 'http://localhost:8080/', //インターフェースプレフィックス ws:true, //プロキシwebsocked changeOrigin:true, //仮想サイトのオリジンを変更する必要があります パス書き換え:{ '^/api':''//パスを書き換えます} } } } } まとめ: たとえば、リクエストインターフェースが プロジェクトを実行すると、インターフェースリクエストのパスが プロキシに入った後の実際のリクエストパスは次のようになります: 最後に学習中は、公式ドキュメントをもっと読む必要があります。クロスドメインやその他の設定の問題については、公式ドキュメントにも多くの設定情報が記載されています。vue cliの設定 最近の現象を要約すると、死ぬほど疲れ果てない限り、死ぬまで一生懸命働くだろう、ということです。さあ、みんな。 これで、Vue が axios リクエストのフロントエンド クロスドメイン問題を解決する方法についての記事は終わりです。Vue が axios リクエストのフロントエンド クロスドメイン問題を解決する方法についての関連コンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、次の関連記事を引き続き参照してください。今後も 123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: mysql 更新ケース更新フィールド値が固定されていない操作
>>: Docker ポート マッピングと外部アクセス不可の問題
記録として、将来使用される可能性があり、困っている友人も使用できます。 BBはもうやめて、まずはレン...
1. 丸い境界線: CSSコードコンテンツをクリップボードにコピー境界線の半径: 4px ; 2....
声明:この記事では、Web ページ制作技術を使用して問題を包括的に解決するという考え方を反映して、W...
目次1. 閉鎖の概念追加の知識ポイント: 2. 閉鎖の役割: 3. 閉鎖例3.1 liをクリックする...
1つ目:通常動作 選択 SUM(ddd) AS count_days、 場合 aa.days >...
序文セキュリティ上の理由から、MySQL の root ユーザーはローカルにのみログインでき、外部ネ...
目次1. 基本概念の紹介2. ネットワークIOの読み取りと書き込みのプロセス3. 5つのLinuxネ...
サーバーとデータベースの構築方法を学ぶ必要があるため、最近は SQL 言語を独学で学び始めました。デ...
MySQL で concat 関数を使用する方法: CONCAT(文字列1、文字列2、…)戻り値は、...
Centos6にZLMediaKitをインストールするZLMediaKit の作者は Ubuntu ...
123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...
目次1. オブジェクトの変更検出2. オブジェクトに関する質問配列変更検出3.1 背景3.2 実装I...
[概要] この記事では、自作の Docker プラットフォームをベースに完全な ELK システムを素...
Vueベースこの機能の核となるアイデアは、JavaScript コードを通じてページ上のノードの左余...
目次1. JavaScriptの基礎2. 基本的なJavaScript構文3. JavaScript...