AJAX によるクロスドメインエンドポイントの読み込み 質問する

AJAX によるクロスドメインエンドポイントの読み込み 質問する

AJAX を使用してクロスドメイン HTML ページを読み込もうとしていますが、dataType が「jsonp」でなければ応答を取得できません。ただし、jsonp を使用すると、ブラウザはスクリプト MIME タイプを期待しますが、「text/html」を受信します。

リクエストのコードは次のとおりです:

$.ajax({
    type: "GET",
    url: "http://saskatchewan.univ-ubs.fr:8080/SASStoredProcess/do?_username=DARTIES3-2012&_password=P@ssw0rd&_program=%2FUtilisateurs%2FDARTIES3-2012%2FMon+dossier%2Fanalyse_dc&annee=2012&ind=V&_action=execute",
    dataType: "jsonp",
}).success( function( data ) {
    $( 'div.ajax-field' ).html( data );
});

リクエストに jsonp を使用しないようにする方法はありますか? すでに crossDomain パラメータの使用を試しましたが、機能しませんでした。

そうでない場合、HTML コンテンツを jsonp で受信する方法はありますか? 現在、コンソールには jsonp 応答で「予期しない <」と表示されています。

ベストアンサー1

jQuery Ajax ノート

  • ブラウザのセキュリティ制限により、ほとんどのアヤックスリクエストは、同一生成元ポリシー; リクエストは、別のドメイン、サブドメイン、ポート、またはプロトコルからデータを正常に取得できません。
  • スクリプトおよび JSONP リクエストは、同一オリジン ポリシーの制限の対象ではありません。

克服する方法はいくつかありますクロスドメインバリア:

いくつかのプラグインが役立ちますクロスドメインリクエスト:

注意喚起!

この問題を克服する最善の方法は、バックエンドに独自のプロキシを作成し、そのプロキシが他のドメインのサービスを指すようにすることです。バックエンドには同一生成元ポリシー制限。ただし、バックエンドでそれができない場合は、次のヒントに注意してください。


**警告!**

サードパーティのプロキシを使用することは、データを追跡できるため、公開情報に使用される可能性があるため、安全な方法ではありませんが、一度もない個人データを含む。


以下のコード例では、jQuery.get()そしてjQuery.getJSON()どちらも、jQuery.ajax()


どこでもCORS

2021年アップデート

公開デモサーバー(cors-anywhere.herokuapp.com)は2021年1月31日までに制限されます。

CORS Anywhere のデモ サーバー (cors-anywhere.herokuapp.com) は、このプロジェクトのデモ用です。しかし、悪用があまりにも一般的になったため、デモがホストされているプラ​​ットフォーム (Heroku) は、悪用への対策にもかかわらず、サーバーのシャットダウンを要求しました。悪用とその人気により、ダウンタイムはますます頻繁になっています。

これに対抗するために、次の変更を加えます。

  1. レート制限は 1 時間あたり 200 から 1 時間あたり 50 に減少します。
  2. 2021 年 1 月 31 日までに、cors-anywhere.herokuapp.com はオープン プロキシとしての機能を停止します。
  3. 2021 年 2 月 1 日より、cors-anywhere.herokuapp.com は、訪問者がチャレンジを完了した後にのみリクエストを処理します。ユーザー (開発者) は、cors-anywhere.herokuapp.com のページにアクセスして、ブラウザーのデモを一時的にロック解除する必要があります。これにより、開発者は機能を試用して、セルフホスティングの決定や代替手段の検討に役立てることができます。

CORS Anywhereはnode.js プロキシプロキシされたリクエストにCORSヘッダーを追加します。API
を使用するには、URLの前にAPI URLを付けるだけです。(https: 見るgithubリポジトリ

必要に応じてクロスドメイン リクエストを自動的に有効にする場合は、次のスニペットを使用します。

$.ajaxPrefilter( function (options) {
  if (options.crossDomain && jQuery.support.cors) {
    var http = (window.location.protocol === 'http:' ? 'http:' : 'https:');
    options.url = http + '//cors-anywhere.herokuapp.com/' + options.url;
    //options.url = "http://cors.corsproxy.io/url=" + options.url;
  }
});

$.get(
    'http://en.wikipedia.org/wiki/Cross-origin_resource_sharing',
    function (response) {
        console.log("> ", response);
        $("#viewer").html(response);
});

起源はなんであれ

起源はなんであれクロスドメイン jsonpアクセス。これはオープンソースの代替品です出典:

データを取得するにはGoogle COM、次のスニペットを使用できます:

// It is good specify the charset you expect.
// You can use the charset you want instead of utf-8.
// See details for scriptCharset and contentType options: 
// http://api.jquery.com/jQuery.ajax/#jQuery-ajax-settings
$.ajaxSetup({
    scriptCharset: "utf-8", //or "ISO-8859-1"
    contentType: "application/json; charset=utf-8"
});

$.getJSON('http://whateverorigin.org/get?url=' + 
    encodeURIComponent('http://google.com') + '&callback=?',
    function (data) {
        console.log("> ", data);

        //If the expected response is text/plain
        $("#viewer").html(data.contents);

        //If the expected response is JSON
        //var response = $.parseJSON(data.contents);
});

CORS プロキシ

CORSプロキシはシンプルなnode.js プロキシ任意の Web サイトで CORS リクエストを有効にします。これにより、サイト上の JavaScript コードが、通常は同一生成元ポリシーによりブロックされる他のドメインのリソースにアクセスできるようになります。

どのように動作するのでしょうか? CORS プロキシは、HTML 5 とともに追加された機能である Cross-Origin Resource Sharing を活用します。サーバーは、ブラウザーが他の Web サイトからホストするリソースを要求できるようにするよう指定できます。CORS プロキシは、応答に「誰でもこれを要求できます」というヘッダーを追加するだけの HTTP プロキシです。

これは目標を達成するためのもう一つの方法です( ホームページ )。あなたがしなければならないのは、 http:// そして www. プロキシされるURLから、URLの先頭に www.corsproxy.com/

$.get(
    'http://www.corsproxy.com/' +
    'en.wikipedia.org/wiki/Cross-origin_resource_sharing',
    function (response) {
        console.log("> ", response);
        $("#viewer").html(response);
});


このhttp://www.corsproxy.com/ドメインは現在、安全でない/疑わしいサイトのようです。使用はお勧めしません。


CORS プロキシ ブラウザ

最近、これを見つけました。これには、セキュリティ重視のさまざまな Cross Origin Remote Sharing ユーティリティが含まれています。ただし、これは Flash をバックエンドとするブラック ボックスです。

実際の動作はここで確認できます:CORS プロキシ ブラウザ
GitHub でソースコードを入手してください:koto/cors-プロキシブラウザ

おすすめ記事