2016-07-22 14 views
1

javacriptファイルからクロスドメインリソースにアクセスすることができません。XMLHttpRequest()を使用しています。 私はいくつかの類似の質問があることを理解しています、私はそれらのいくつかを行ったが、私はいくつかの詳細について少し混乱している。 正確なセットアップと私の具体的な疑問について言及します。CORS(クロスオリジンリソース共有)をどのように/有効にするか?

セットアップ:

私は私のローカルLANのネットワークに存在するUbuntuマシン上で実行しているApacheサーバ上で私のHTMLとJSファイルを持っています。このアプリケーションは、video.jsの基本的なhlsプラグインです。 同じローカルLANのWindows PCから、hlsプレーヤー用のindex.htmlファイルを開きます。限り、私はLinuxマシン上に存在している映像コンテンツを選択すると、予想通り、それが正常に動作しますが、それを外部コンテンツ(例えばhttp://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8)を与えるには、エラーを失敗し、提供します:

XMLHttpRequestがhttp://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8をロードすることはできません。要求されたリソースに「Access-Control-Allow-Origin」ヘッダーが存在しません。 Origin 'http://172.20.33.49'はアクセスできません。

(ここで172.20.33.49はLinuxマシンのIPれる)だから私のクエリは

です:

  1. どのサーバーでアクセス制御 - 許可 - 起源ヘッダがなければなりません適切な値に設定してください(簡単にするために '*'と答えてください)。これは、ローカルのLinuxサーバーまたは外部コンテンツをホストするサーバー、あるいはその両方で動作しますか?

  2. これが機能するには、ブラウザ/ JavaScriptまたはHTMLコードで行う必要がある設定/設定/コードの変更はありますか?

  3. 一般的なクエリとして、CORSが動作するためにクライアントが行うことができることはありますか、それとも純粋にサーバーの要件/構成ですか?
  4. HTTP応答で 'アクセス制御許可原点'は必須ですか?そうでない場合、その欠如は何を意味しますか?同じドメインのリソースにしかアクセスできないこと、またはすべてのドメインがアクセス可能であることを意味しますか?クライアントがサーバーにこのヘッダーを追加させる方法はありますか?

答えて

2

On which server should the Access-Control-Allow-Origin header be set

あなたはXHRで読みたいコンテンツをホストするサーバー。エラーメッセージはこれを綴りますが、要求しているリソースへのURLを示し、ヘッダがそのリソースに存在しないことを示します。

Is there any setting/configuration/code change which I need to do in my browser/javascript or HTML code for this to work?

いいえブラウザはCORSを透過的に処理します。

As a general query, is there anything the client can/should do for CORS to work or is it purely a server requirement/configuration?

クライアントはCORSをサポートする必要があります。現代のブラウザはすべてそうです。

Is the 'Access-Control-Allow-Origin' mandatory in HTTP responses?

If not then what does its absence mean - Does it mean only resources from same domain can be accessed or does it mean all domains are accessible(equivalent to *) ?

サーバがアクセス制御 - 許可 - 起源を指定していない場合、それはそのデータを読み取るために、他の起源に権限を付与するものではありません。

Is there any way a client can force a server to add this header?

なし(ブラウザ拡張機能が、このテストの目的のために有用であることができ、応答をインターセプトし、ヘッダを追加することができます)。

+0

詳細な対応をありがとうございます。 この場合、外部のサーバーを制御していないため、外部のコンテンツを再生する方法はありません(応答を傍受して変更するブラウザプラグインのインストールを除いて)。 若干異なる点として、ほとんどのサーバーで他のドメインからのアクセスを許可しないようにするのは、これが一般的な/典型的な動作です。つまり、これはJavaScriptコードのアクセスを厳しく制限するように見えるでしょうか? –

+0

はい、これは正常です。 JavaScriptのための厳しい制限されたアクセスは良いことです。訪問したウェブサイトでGmailをリクエストしたり、メールを読んだりすることはできません。オンラインバンキングですか?クロスオリジンの要求では、データのサプライヤが積極的に安全で望ましいと言わなければなりません。 – Quentin

関連する問題