目次
利用
欠点は、get メソッドのサポートのみに制限があることです。
JSONP は GET および非同期リクエストであり、次のようなものがあります。他のメソッドと同期リクエストは存在せず、jQuery はデフォルトで JSONP リクエストのキャッシュをクリアします。
1.CORS原理
2.CORS优缺点
ホームページ ウェブフロントエンド jsチュートリアル クロスドメインとは何ですか?クロスドメイン JavaScript の 4 つの方法の紹介

クロスドメインとは何ですか?クロスドメイン JavaScript の 4 つの方法の紹介

Oct 22, 2018 pm 01:54 PM
css html html5 java javascript

この記事では、PHP シナジーの実装について詳しく説明します (コード付き)。必要な方は参考にしていただければ幸いです。

#1. クロスドメインとは

クロスドメインとは何ですか?クロスドメイン JavaScript の 4 つの方法の紹介

##JavaScript セキュリティ上の理由から、クロスドメイン他のページからのオブジェクトへの呼び出しは許可されません。では、クロスドメインとは何でしょうか? 簡単に理解すると、JavaScript の同一オリジン ポリシーの制限により、ドメイン名 a.com の js はドメイン名 b.com または c.a.com のオブジェクトを操作できません。

プロトコル、サブドメイン名、メインドメイン名、ポート番号のいずれかが異なる場合は、すべて異なるドメインとしてカウントされます。異なるドメインからのリソースの要求は「クロスドメイン」とみなされます。

例: http://www.abc.com/index.html は http://www.efg.com/service.php をリクエストします。


注意すべき点が 1 つあります:
クロスドメインとは、リクエストを送信できないことを意味するのではなく、リクエストは送信でき、サーバーはリクエストを受信して​​通常どおり結果を返すことができますが、結果はブラウザ

によってインターセプトされます。これがドメイン間で発生する理由は、同一オリジン ポリシーによって制限されているためです。同一オリジン ポリシーでは、通常の通信ではソースが同じであること、つまりプロトコル、ドメイン名、ポート番号がすべて正確であることが必要です。同じ。

クロスドメインについて詳しく理解するには、下の図を参照してください。

クロスドメインとは何ですか?クロスドメイン JavaScript の 4 つの方法の紹介2 つの点に関する特別な注意事項:

最初に: プロトコルとポートが原因でクロスドメインの問題が発生した場合、「フロント』は無力です。

2つ目: クロスドメインの問題に関しては、ドメインは「URLのヘッダー」によってのみ識別され、ドメイン名に対応するIPアドレスが同じかどうかによって判断されることはありません。 「URL のヘッダー」は、「プロトコル、ドメイン名、ポートが一致する必要がある」と理解できます。

2. 同一生成元ポリシーとその制限とは

同一生成元ポリシーは、あるソースからロードされたドキュメントまたはスクリプトが別のソースからのリソースと対話する方法を制限します。 。これは、潜在的に悪意のあるファイルを隔離するための重要なセキュリティ メカニズムです。この存在により、ユーザーのプライバシー情報が保護され、個人情報の偽造などが防止されます (Cookie を参照)。

同一生成元ポリシーによって制限されるコンテンツには、次のものが含まれます:

Cookie、LocalStorage、IndexedDB、およびその他のストレージ コンテンツ
  • DOM node
  • AJAX リクエストは送信できません
  • ただし、リソースのクロスドメイン読み込みを可能にする 3 つのタグがあります:

1.<img  src="/static/imghw/default1.png" data-src="http://crossdomain.com/jsonServerResponse?jsonp=fn" class="lazy" alt="クロスドメインとは何ですか?クロスドメイン JavaScript の 4 つの方法の紹介" >
2.<link>
3.<script></script>
ログイン後にコピー
次に、クロスドメインを処理するいくつかの方法について説明します。ただし、すべてのクロスドメイントランザクションは情報プロバイダーによって承認される必要があります。許可なく取得できる場合は、ブラウザの同一生成元ポリシーの脆弱性となります。

3. クロスドメイン処理方法 1 - JSONP

1.JSONP の原則

利用

要素のこのオープン ポリシーを使用すると、Web ページは他のソースから動的に生成された JSON データを取得できます。 JSONP リクエストは相手のサーバーでサポートされている必要があります。 2. JSONP と AJAX の比較

JSONP と AJAX は、クライアントがサーバーにリクエストを送信し、サーバーからデータを取得する方法は同じです。ただし、AJAX は同一オリジン ポリシーに属し、JSONP は非オリジナル ポリシー (クロスドメイン リクエスト) に属します。

3 JSONP の利点と欠点

JSONP の利点は次のとおりです。は互換性が高く、主流ブラウザのクロスオリジン問題を解決するために使用できます。

欠点は、get メソッドのサポートのみに制限があることです。

4.JSONP プロセス (サードパーティ API アドレスを例として取り上げます。バックグラウンド プログラムを考慮する必要はありません)

コールバックを宣言します。 function の場合、その関数名 (fn など) は、クロスドメイン データを要求するサーバーに渡されるパラメーター値として使用され、ターゲット データ (サーバーから返されるデータ) を取得します。
  • <script><li> タグを作成し、クロスドメイン API データ インターフェイスのアドレスをスクリプトの src に割り当て、さらにこのアドレスでサーバーをリクエストします。関数名を渡します (パラメーターは疑問符:?callback=fn を使用して渡すことができます)。 <p><code>サーバーはリクエストを受信した後、特別な処理を実行する必要があります。渡された関数名と、提供する必要のあるデータを文字列に連結します。次に例を示します。渡される関数名は fn で、関数が用意するデータは fn([{"name":"jianshu"}]) です。 <ul style="list-style-type: square;" class=" list-paddingleft-2"><li><p>最後に、サーバーは準備されたデータを HTTP プロトコルを通じてクライアントに返し、クライアントは以前に宣言されたコールバック関数 (fn) を呼び出して実行して、返されたデータ。 </script>
  • <script>
        function fn(data) {
            alert(data.msg);
        }
    </script>
    <script></script>
    ログイン後にコピー
    ここで、fn はクライアントによって登録されたコールバック関数です。その目的は、クロスドメイン サーバー上の json データを取得し、データを処理することです。
  • サーバーからクライアントに返されるデータの最終形式は次のとおりです。
    fn({ msg:'this  is  json  data'})
    ログイン後にコピー

    5.jQuery の jsonp 形式

    JSONP は GET および非同期リクエストであり、次のようなものがあります。他のメソッドと同期リクエストは存在せず、jQuery はデフォルトで JSONP リクエストのキャッシュをクリアします。

    $.ajax({
    url:"http://crossdomain.com/jsonServerResponse",
    dataType:"jsonp",
    type:"get",//可以省略
    jsonpCallback:"fn",//->自定义传递给服务器的函数名,而不是使用jQuery自动生成的,可省略
    jsonp:"jsonp",//->把传递函数名的那个形参callback变为jsonp,可省略
    success:function (data){
    console.log(data);}
    });
    ログイン後にコピー
    4. クロスドメイン処理方法 2 - CORS

    1.CORS原理

    整个CORS通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。因此,实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信

    2.CORS优缺点

    CORS要求浏览器(>IE10)和服务器的同时支持,是跨域的根本解决方法,由浏览器自动完成
    优点在于功能更加强大支持各种HTTP Method,缺点是兼容性不如JSONP。
    只需要在服务器端做一些小小的改造即可:

    header("Access-Control-Allow-Origin:*");
    header("Access-Control-Allow-Methods:POST,GET");
    ログイン後にコピー

    例如:网站http://localhost:63342/ 页面要请求http://localhost:3000/users/userlist  页面,userlist页面返回json字符串格{name: 'Mr.Cao', gender: 'male', career: 'IT Education'}

    //在服务器端设置同源策略地址
    router.get("/userlist", function (req, res, next) {   
        var user = {name: 'Mr.Cao', gender: 'male', career: 'IT Education'};  
        res.writeHeader(200,{"Access-Control-Allow-Origin":'http://localhost:63342'});  
        res.write(JSON.stringify(user));  
        res.end();  
    });
    ログイン後にコピー

    在响应头上添加Access-Control-Allow-Origin属性,指定同源策略的地址。同源策略默认地址是网页的本身。只要浏览器检测到响应头带上了CORS,并且允许的源包括了本网站,那么就不会拦截请求响应

    クロスドメインとは何ですか?クロスドメイン JavaScript の 4 つの方法の紹介

    五、处理跨域方法三——WebSocket

    Websocket是HTML5的一个持久化的协议,它实现了浏览器与服务器的全双工通信,同时也是跨域的一种解决方案。WebSocket和HTTP都是应用层协议,都基于 TCP 协议。但是 WebSocket 是一种双向通信协议,在建立连接之后,WebSocket 的 server 与 client 都能主动向对方发送或接收数据。同时,WebSocket 在建立连接时需要借助 HTTP 协议,连接建立好了之后 client 与 server 之间的双向通信就与 HTTP 无关了。

    原生WebSocket API使用起来不太方便,我们使用Socket.io,它很好地封装了webSocket接口,提供了更简单、灵活的接口,也对不支持webSocket的浏览器提供了向下兼容。

    //前端代码:
    <p>user input:<input></p>
    <script></script>
    <script>
    var socket = io(&#39;http://www.domain2.com:8080&#39;);
    // 连接成功处理
    socket.on(&#39;connect&#39;, function() {
        // 监听服务端消息
        socket.on(&#39;message&#39;, function(msg) {
            console.log(&#39;data from server: ---> &#39; + msg); 
        });
    
     // 监听服务端关闭
        socket.on(&#39;disconnect&#39;, function() { 
            console.log(&#39;Server socket has closed.&#39;); 
        });
    });
    document.getElementsByTagName(&#39;input&#39;)[0].onblur = function() {
        socket.send(this.value);
    };
    </script>
    ログイン後にコピー
    //Nodejs socket后台:
    var http = require('http');
    var socket = require('socket.io');
    // 启http服务
    var server = http.createServer(function(req, res) {
        res.writeHead(200, {
            'Content-type': 'text/html'
        });
        res.end();
    });
    server.listen('8080');
    console.log('Server is running at port 8080...');
    // 监听socket连接
    socket.listen(server).on('connection', function(client) {
        // 接收信息
        client.on('message', function(msg) {
            client.send('hello:' + msg);
            console.log('data from client: ---> ' + msg);
        });
    
        // 断开处理
        client.on('disconnect', function() {
            console.log('Client socket has closed.'); 
        });
    });
    ログイン後にコピー

    六、处理跨域方法四——postMessage

    如果两个网页不同源,就无法拿到对方的DOM。典型的例子是iframe窗口和window.open方法打开的窗口,它们与父窗口无法通信。HTML5为了解决这个问题,引入了一个全新的API:跨文档通信 API(Cross-document messaging)。这个API为window对象新增了一个window.postMessage方法,允许跨窗口通信,不论这两个窗口是否同源。postMessage方法的第一个参数是具体的信息内容,第二个参数是接收消息的窗口的源(origin),即"协议 + 域名 + 端口"。也可以设为*,表示不限制域名,向所有窗口发送。

    接下来我们看个例子:
    http://localhost:63342/index.html页面向http://localhost:3000/message.html传递“跨域请求信息”

    //发送信息页面 http://localhost:63342/index.html
      
      
        <meta>  
        <title>跨域请求</title>   
      
      
        <iframe></iframe>  
        <input>  
      
      
    <script>  
       function  run(){  
            var frm=document.getElementById("frm");  
            frm.contentWindow.postMessage("跨域请求信息","http://localhost:3000");  
       }  
    </script>
    ログイン後にコピー
    //接收信息页面 http://localhost:3000/message.html
     window.addEventListener("message",function(e){  //通过监听message事件,可以监听对方发送的消息。
      console.log(e.data);  
    },false);
    ログイン後にコピー

    以上がクロスドメインとは何ですか?クロスドメイン JavaScript の 4 つの方法の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

    ホットAIツール

    Undresser.AI Undress

    Undresser.AI Undress

    リアルなヌード写真を作成する AI 搭載アプリ

    AI Clothes Remover

    AI Clothes Remover

    写真から衣服を削除するオンライン AI ツール。

    Undress AI Tool

    Undress AI Tool

    脱衣画像を無料で

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    AI Hentai Generator

    AI Hentai Generator

    AIヘンタイを無料で生成します。

    ホットツール

    メモ帳++7.3.1

    メモ帳++7.3.1

    使いやすく無料のコードエディター

    SublimeText3 中国語版

    SublimeText3 中国語版

    中国語版、とても使いやすい

    ゼンドスタジオ 13.0.1

    ゼンドスタジオ 13.0.1

    強力な PHP 統合開発環境

    ドリームウィーバー CS6

    ドリームウィーバー CS6

    ビジュアル Web 開発ツール

    SublimeText3 Mac版

    SublimeText3 Mac版

    神レベルのコード編集ソフト(SublimeText3)

    ブートストラップのサイズを変更する方法 ブートストラップのサイズを変更する方法 Apr 07, 2025 pm 03:18 PM

    Bootstrapの要素のサイズを調整するには、次のものを含むDimensionクラスを使用できます。

    ブートストラップに写真を挿入する方法 ブートストラップに写真を挿入する方法 Apr 07, 2025 pm 03:30 PM

    ブートストラップに画像を挿入する方法はいくつかあります。HTMLIMGタグを使用して、画像を直接挿入します。ブートストラップ画像コンポーネントを使用すると、レスポンシブ画像とより多くのスタイルを提供できます。画像サイズを設定し、IMG-Fluidクラスを使用して画像を適応可能にします。 IMGボーダークラスを使用して、境界線を設定します。丸い角を設定し、IMGラウンドクラスを使用します。影を設定し、影のクラスを使用します。 CSSスタイルを使用して、画像をサイズ変更して配置します。背景画像を使用して、背景イメージCSSプロパティを使用します。

    ブートストラップボタンの使用方法 ブートストラップボタンの使用方法 Apr 07, 2025 pm 03:09 PM

    ブートストラップボタンの使用方法は?ブートストラップCSSを導入してボタン要素を作成し、ブートストラップボタンクラスを追加してボタンテキストを追加します

    ブートストラップのフレームワークをセットアップする方法 ブートストラップのフレームワークをセットアップする方法 Apr 07, 2025 pm 03:27 PM

    Bootstrapフレームワークをセットアップするには、次の手順に従う必要があります。1。CDNを介してブートストラップファイルを参照してください。 2。独自のサーバーでファイルをダウンロードしてホストします。 3。HTMLにブートストラップファイルを含めます。 4.必要に応じてSASS/LESSをコンパイルします。 5。カスタムファイルをインポートします(オプション)。セットアップが完了したら、Bootstrapのグリッドシステム、コンポーネント、スタイルを使用して、レスポンシブWebサイトとアプリケーションを作成できます。

    ブートストラップにスプリットラインを書く方法 ブートストラップにスプリットラインを書く方法 Apr 07, 2025 pm 03:12 PM

    ブートストラップスプリットラインを作成するには2つの方法があります。タグを使用して、水平方向のスプリットラインを作成します。 CSS Borderプロパティを使用して、カスタムスタイルのスプリットラインを作成します。

    HTML、CSS、およびJavaScriptの役割:コアの責任 HTML、CSS、およびJavaScriptの役割:コアの責任 Apr 08, 2025 pm 07:05 PM

    HTMLはWeb構造を定義し、CSSはスタイルとレイアウトを担当し、JavaScriptは動的な相互作用を提供します。 3人はWeb開発で職務を遂行し、共同でカラフルなWebサイトを構築します。

    ブートストラップの日付を表示する方法 ブートストラップの日付を表示する方法 Apr 07, 2025 pm 03:03 PM

    回答:ブートストラップの日付ピッカーコンポーネントを使用して、ページで日付を表示できます。手順:ブートストラップフレームワークを紹介します。 HTMLで日付セレクター入力ボックスを作成します。ブートストラップは、セレクターにスタイルを自動的に追加します。 JavaScriptを使用して、選択した日付を取得します。

    VueでBootstrapの使用方法 VueでBootstrapの使用方法 Apr 07, 2025 pm 11:33 PM

    vue.jsでBootstrapを使用すると、5つのステップに分かれています。ブートストラップをインストールします。 main.jsにブートストラップをインポートしますブートストラップコンポーネントをテンプレートで直接使用します。オプション:カスタムスタイル。オプション:プラグインを使用します。

    See all articles