web-dev-qa-db-ja.com

CORSまたはJSONPを使用しないクロスドメインリクエスト

私はこの質問が以前に尋ねられたことを知っていますが、答えのどれも私のために働いていません!私は学校のプロジェクトを行っていますが、学校のサーバー上の動的スケジュールファイルによって返されるHTML(プロジェクト用に解析するため)を取得したいと思います。

HTMLが欲しいページは次のとおりです: https://telaris.wlu.ca/ssb_prod/bwckschd.p_disp_dyn_sched

CORSは学校のサーバーファイルに対して有効になっていないと思います。JSONPをサポートしているかどうかはわかりません...

このページからHTMLを取得するためにクロスドメインリクエストを設定するにはどうすればよいですか?

私が試してみました:

$.ajax({
    type:'POST',
    url: 'https://telaris.wlu.ca/ssb_prod/bwckschd.p_disp_dyn_sched',
    headers: {
      'Access-Control-Allow-Origin': '*'
   },
   contentType: 'text/html',
   crossDomain:true
}).done(function( data ) {

});

そして私はエラーを受け取ります:

XMLHttpRequestを読み込めません https://telaris.wlu.ca/ssb_prod/bwckschd.p_disp_dyn_sched 。要求されたリソースに「Access-Control-Allow-Origin」ヘッダーがありません。したがって、オリジン 'null'はアクセスを許可されません。応答のHTTPステータスコードは501でした。

追加すると:

dataType:'jsonp'

エラーが発生します:

GET https://telaris.wlu.ca/ssb_prod/bwckschd.p_disp_dyn_sched?callback=jQuery21108736664191819727_1416964243449&_=141696424345 400(不正なリクエスト)jquery.min.js:4send jquery.min.js:4n.extend .ajax jquery.min.js:4(無名関数)

どんな助けでも大歓迎です!

9
Jack C

ブラウザは、サイトが(CORSまたはJSONPを介して)クロスオリジンリクエストを明示的に許可しない限り、 "same-Origin" アクセス制御を強制します。したがって、アクセスしようとしているサイトがクロスオリジンリクエストを許可していない場合、ブラウザのみを使用してサイトから直接データを取得することはできません。ブラウザは、ターゲットサイトによって要求されたのと同じOrigin制限を適用しています。

サーバーにはさまざまな方法があるため、これはサーバーのセキュリティではありません。これは、ブラウザからの1つの特定のタイプのアクセスにのみ適用されます(ただし、1つの特定のタイプのアクセス保護が役立ちます)。

つまり、データをブラウザに取り込むには、データを取得できる何らかのサードパーティのエージェント(ブラウザ以外)を使用する必要があります。これを行う最も一般的な2つの方法は次のとおりです。

  1. あなた自身のサーバー。他のサーバーからコンテンツを取得するように、自分のサーバーに要求します。次に、サーバーは他のサーバーからデータをフェッチし、ブラウザーでデータを返します。

  2. プロキシサーバー。オプション#1で説明されていることを実行するためだけに構築された、事前構成されたプロキシサーバーがいくつかあります。プロキシサービスを使用するか、独自のプロキシサーバーをインストールしてこれを行うか、この機能を持つように独自のWebサーバーを構成することができます。

したがって、連携するブラウザからクロスオリジン制限を回避することはできません。ただし、サーバーからそれらをバイパスすることはできます。これは、COR制限がブラウザにのみ実装されているためです。これらはサーバーによる制限ではありません。ブラウザはターゲットサーバーにどのCORポリシーが機能しているかを尋ね、ブラウザでのみそれらを適用します。そのサーバーにリクエストを送信する他のサーバーは、CORポリシーに注意を払う必要はありません。

10
jfriend00

技術的な制限が人生をより困難にするとき、それがどれほど苛立たしいことになるかを私は知っています。

このような状況では、Javascriptライブラリを試すことができます: Xdomain
ここで同じことについての参照記事を確認できます: http://hayageek.com/cross-domain-ajax-jquery-without-cors/
問題がある場合は、YCombinatorのディスカッションが役立つ場合があります: https://news.ycombinator.com/item?id=8023844

もう1つの方法は、サーバーを使用してHTMLページを取得し、必要に応じてアプリケーションにプッシュすることです。このようなもの。 1つのiframeを 'my_external_content.php'として追加したと仮定します。コードは次のようになります

    <?php

        $externalURL = "http://otherdomain.com";

        $externalData = file_get_contents($externalURL);

        echo externalData;
    ?>

SO参照: 同一生成元ポリシーを回避する方法 )に関する他の質問を参照してください。

これがあなたや同じ状況にある他の人に役立つことを願っています。

1
Vinod Tigadi