0

MVC 4 で REST ベースの webAPI を作成し、他のドメインの HTML からこれを呼び出すときにサーバーでホストし、ローカル PC で put callback=? のような JSONP 要求として呼び出す必要があります。URLにあるので、jsonpにすることができます。私の質問は、なぜそうなのかということです。クロスドメインが原因である場合、Google、Facbook、およびその他の企業が API をホストする方法は、独自のドメインからも呼び出しますが、callback= を保持しません。彼らのURLで。

では、なぜ私の API には callback= が必要なのですか? 他のドメインから、または単純なjquery htmlを使用してローカルPCで呼び出す場合は、URLで。

4

2 に答える 2

1

これは、ブラウザによって課された同一オリジン ポリシーによるものです。http://www.w3.org/Security/wiki/Same_Origin_Policyを参照して ください

http://en.wikipedia.org/wiki/Same_origin_policy

. また、将来的には CORS が JSONP よりも優れたオプションになる可能性があることに注意してください。

http://en.wikipedia.org/wiki/Cross-origin_resource_sharing

編集: - - - - - -

上記のリンクを確認すると、JSONP を使用すると、ユーザーはブラウザーによって課されるこの同一生成元ポリシーのセキュリティ対策を回避できることがわかります。

トリックは、ブラウザがタグがオリジン以外のドメインのファイルを参照できるようにすることです。

基本的に、JSONP で何が起こるかというと、コールバック関数名をクエリ文字列に追加してサーバーに送信します。次に、サーバーは、この関数への呼び出しを使用して JSON 要求にパディングまたはプレフィックスを付けます。したがって、応答を示す名前の P は、パディングまたはプレフィックスが付けられます。

たとえば、次のようなスクリプト タグを作成できます。

次に、ターゲットサーバーは、次のような応答を送信する必要があります

mymethod({normal: 'json response'})

この repsone がクライアント側で評価されると (他の JavaScript ファイルと同様)、そのサーバーからの JSON 応答を使用してメソッドが効果的に呼び出されます。

ただし、これは GET リクエストしか実行できません。

POST (PUT/DELETE) リクエストを作成する場合は、サーバーが事前に特定のヘッダーを設定する必要がある CORS を使用する必要があります。

Access-Control-Allow-Origin: www.ext.site.com

お役に立てれば。

于 2012-11-18T06:41:17.430 に答える
0

同一オリジン ポリシーの制限のため。同一オリジン ポリシーは、あるドメインから読み込まれたスクリプトが、別のドメインからドキュメントのプロパティを取得または操作することを防ぎます。つまり、要求された URL のドメインは、現在の Web ページのドメインと同じでなければなりません。これは基本的に、ブラウザーがコンテンツをさまざまな発信元から分離して、操作から保護することを意味します。

于 2012-11-18T06:39:56.950 に答える