同一起源ポリシーAjax リクエストの制限:Ajaxは自身のサーバーにのみリクエストを送信できる同一生成元ポリシーはブラウザのセキュリティ機能です。異なる生成元のクライアント スクリプトは、明示的な承認なしに互いのリソースを読み書きすることはできません。 たとえば、Web サイト A と Web サイト B があるとします。Web サイト A の HTML ファイルは、Web サイト A のサーバーにのみ Ajax リクエストを送信できます。 ウェブサイト B の HTML ファイルはウェブサイト B にのみ Ajax リクエストを送信しますが、ウェブサイト A はウェブサイト B に Ajax リクエストを送信できません。 同様に、Web サイト B は Web サイト A に Ajax リクエストを送信できません。 相同:2 つのページのプロトコル、ドメイン名、ポートが同じ場合、2 つのページは同じソースに属します。どちらか 1 つだけが異なる場合は、異なるソースからのものです。 http://www.example.com/dir/page.html
同一生成元ポリシーの目的:
同一生成元ポリシーによる制限なし:ページ内のリンク、リダイレクト、フォーム送信は同一オリジンポリシーの対象ではなく、クロスドメイン リソースの導入が許可されます。しかし、js はロードされたコンテンツを読み書きできません。ページに埋め込まれた クロスドメインの問題クロスドメイン: プロトコル、ドメイン名、ポート番号に違いがあれば、クロスドメインです。 クロスドメインの理由:クロスドメイン問題は、JavaScript の同一生成元ポリシーに起因します。つまり、プロトコル + ホスト名 + ポート番号 (存在する場合) が同じ場合にのみ相互アクセスが許可されます。 特定のドメイン名のインターフェースが他のドメイン名の Web ページによって不正に呼び出されるのを防ぐために、ブラウザは JavaScript にセキュリティ制限を課します。 つまり、JavaScript は自身のドメインの下にあるリソースにのみアクセスして操作することができ、他のドメインの下にあるリソースにアクセスして操作することはできません。 クロスドメインの問題はJSとAjax、 HTML 自体にはクロスドメインの問題はありません。 たとえば、タグ、スクリプト タグ、さらにはフォーム タグ (ドメイン間でデータを直接送受信できる) などです。 クロスドメインの問題を解決する: インターネット上の接続要求を受け入れるためにプロキシ サーバーを使用することを指します。 その後、要求は内部ネットワーク上のサーバーに転送されます。 そして、サーバーから取得した結果をインターネット上の接続を要求しているクライアントに返します。 この時点で、プロキシ サーバーは外部からはリバース プロキシ サーバーとして表示されます。 JSONPJSONPで解決jsonp は、JSON with padding の略語です。Ajax リクエストには属しませんが、Ajax リクエストをシミュレートできます。 JSONPはコールバック関数とデータの2つの部分で構成されています
解決:簡単に理解すると、サーバー側では、JSONデータが関数パラメータとして使用され、関数に入力され、関数がクライアント上で呼び出されてデータが処理されます。 クロスドメイン リクエストを実装するための JSONP の原則は、単に JSONP の利点と欠点:アドバンテージ: 同一生成元ポリシーによって制限される XMLHttpRequest オブジェクトによって実装される Ajax リクエストとは異なり、互換性が高く、古いブラウザーでも実行できます。 XMLHttpRequest または ActiveX のサポートは必要なく、リクエストが完了した後にコールバックを呼び出すことによって結果を返すことができます。 欠点: GET リクエストのみがサポートされており、POST などの他の種類の HTTP リクエストはサポートされていません。クロスドメイン HTTP リクエストのみがサポートされています。 異なるドメインの2つのページ間でJavaScript呼び出しを行う方法は解決されません。 JSONP コードの最適化:クライアントは関数名をサーバーに渡す必要がある スクリプトリクエストを動的リクエストに変換する リクエストの送信を容易にするためにjsonp関数をカプセル化する サーバー側コード最適化 res.jsonp メソッド JSONP関数のカプセル化:関数 jsonp (オプション) { // スクリプトタグを動的に作成します var script = document.createElement('script'); // 文字列を連結するための変数 var params = ''; for (var attr in options.data) { パラメータ += '&' + 属性 + '=' + オプション.data[属性]; } //myJsonp0124741 var fnName = 'myJsonp' + Math.random().toString().replace('.', ''); // グローバル関数にする window[fnName] = options.success; // スクリプト タグに src 属性を追加します。script.src = options.url + '?callback=' + fnName + params; // ページにスクリプト タグを追加します。 document.body.appendChild(script); // スクリプトタグにonloadイベントを追加する script.onload = function () { document.body.removeChild(スクリプト); } } 使用: // ボタンを取得します var btn1 = document.getElementById('btn1'); var btn2 = document.getElementById('btn2'); // ボタンにクリックイベントを追加する btn1.onclick = function () { jsonp({ // リクエストアドレス URL: 'http://localhost:3001/better', データ: { 名前: 'lisi', 年齢: 30 }, 成功: 関数 (データ) { コンソールログ(123) コンソール.log(データ) } }) } btn2.onclick = 関数(){ jsonp({ // リクエストアドレス URL: 'http://localhost:3001/better', 成功: 関数 (データ) { コンソールログ(456789) コンソール.log(データ) } }) } CORSCORSで解決するCORS: 正式名称はクロスオリジン リソース共有で、これによりブラウザーはクロスドメイン サーバーに Ajax リクエストを送信できるようになり、Ajax は同じオリジンでのみ使用できるという制限を克服します。 //クロスドメインを実現するためにサーバーのレスポンスヘッダー情報を設定します res.setHeader("Access-Control-Allow-Origin", "*"); /* アスタリスクはすべてのドメインが許容されることを示します。 */ Express フレームワークでのクロスドメイン実装:クロスドメインモジュールをインストールします。構文: app.js ファイルに cors モジュールをインポートします: クロスドメインモジュールを使用します(app.js ファイル内): 上記は、同一オリジンとクロスドメイン、jsonp(関数のカプセル化)、および CORS の原則の詳細な分析です。同一オリジンとクロスドメイン、jsonp(関数のカプセル化)、および CORS の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
>>: Windows 10 に Ubuntu 20.04 デュアル システムをインストールする詳細なグラフィック チュートリアル
その理由は、このタイプの Web ページが WAP と呼ばれるワイヤレス プロトコルから生成されたた...
最近、私たちの小さなチームは、サーバー上の共有フォルダーを共有して、全員がパブリックリソースドキュメ...
タイトルの通り、高さは既知で、左と右の列の幅は 300 ピクセル、中央は適応型です。弾性ボックス自体...
この記事では、jsとjQueryテクノロジーを使用して告白弾幕を実現する方法を紹介します。具体的な内...
プロジェクトでは、さまざまな条件や使用シナリオを制御するために、docker-compose.yml...
WeChatアプレットはスクロールビューを使用して左右のリンクを実現します。参考までに、具体的な内容...
目次序文MySQL の NULL 2 NULL占有長3 NULL値の比較4SQLはNULL値を処理す...
目次1. インデックスプッシュダウン最適化の原理2. インデックスプッシュダウンの具体的な実践1. ...
MySQL_8.0.2のオフラインインストール方法は参考までに。具体的な内容は以下のとおりです。次の...
Server-Uソフトウェアの紹介Server-U は非常に強力なファイル マネージャーです。FTP...
この記事では、IP入力ボックスを実装するための react+antd.3x の具体的なコードを参考ま...
Chrome ブラウザで Web ページを開くと、ページを右クリックすると 2 つの非常によく似たオ...
目次序文一目でわかる建築オペレーティングシステムとの対話シングルスレッドイベント駆動/イベントループ...
この記事は、Element公式サイトとQiniu Cloud公式サイトを使用しています。 eleme...
同僚からよく聞かれるのですが、ファイル/ディレクトリを削除すると「操作は許可されていません」というエ...