0

JSONP呼び出しを試しています。サーバー1のドメインdomain1.comの下にNodeJsアプリがあります。次のようになります。

server.get('/api/testjsonp', function(req, res) {

  var clientId = req.param('clientId');

  res.header('Content-Type', 'application/json');
  res.header('Charset', 'utf-8') 
  res.send(req.query.callback + '({"something": "rather", "more": "fun",
          "sourceDomain": "' + req.headers.origin + '"' + ',"clientId":"' + clientId + 
          '"});');  

});

別のサーバー(サーバー2)と別のドメイン(domain2.com)で、次のような呼び出しを使用してテストHTMLページを作成しました。

    var data = { clientId : 1234567890 };

            $.ajax({
                    dataType: 'jsonp',
                    data: data,
                    jsonp: 'callback',
                    url: 'https://domain1.com/api/testjsonp?callback=1',                        
                    success: function(data) {
                        alert('success');
                    },
        error: function(err){
                        alert('ERROR');
                        console.log(err);
                    }
                });

ここに2つの問題があります:

1)なぜこれが機能しているのですか?それはクロスドメイン呼び出しではないので、ALLOW-ORIGINヘッダーのものを実装する必要がありますか?私はこの例に従っています:

http://css.dzone.com/articles/ajax-requests-other-domains

http://benbuckman.net/tech/12/04/cracking-cross-domainallow-origin-nut

2)サーバーでは、どのドメインが呼び出しを行っているのかわかりません。req.headers.originは常に未定義です。不要な呼び出しを防ぐために、どのドメインが呼び出しているかを知りたいのですが。別の方法として、呼び出し元のIPを確認することもできますが、どのようにすればよいでしょうか。

どうもありがとう

4

1 に答える 1

0

なぜこれが機能しているのですか?それはクロスドメイン呼び出しではないので、ALLOW-ORIGINヘッダーのものを実装する必要がありますか?私

ブラウザに関する限り、別のソースからデータを直接読み取っているわけではありません。別のオリジンからJavaScriptプログラムをロードしています(データがバンドルされている場合があります)。

サーバーでは、どのドメインが呼び出しを行っているのかわかりません。req.headers.originは常に未定義です。不要な呼び出しを防ぐために、どのドメインが呼び出しているかを知りたいのですが。

参照ページのURLは、Originヘッダーではなく、Refererヘッダーに保存されます。ただし、これはオプションであり、多くの状況で送信されることはありません。

データへのアクセスを特定のサイトに制限する場合は、JSON-Pを使用できません。代わりにプレーンJSONとCORSを使用してください。

別の方法として、呼び出し元のIPを確認することもできますが、どのようにすればよいでしょうか。

これにより、クライアントを誘導したサーバーではなく、クライアントのアドレスがわかります。

于 2012-11-25T18:32:11.073 に答える