1

サードパーティ API ( および にx.apisite.comありますy.apisite.com) にアクセスする必要がある Javascript を使用して Web アプリを作成しています。を使用しXMLHTTPRequestていましたが、自分のローカル サーバーからファイルを提供すると、同一生成元ポリシーのために失敗します。

さて、この Web アプリは、ダウンロードしたファイルがキャッシュされるモバイル デバイスにインストールされることになっています。そのため、DNS エントリを自分のローカル サーバーx.apisite.comを指すように変更しました。y.apisite.com次に、ファイルをダウンロードし、DNS エントリを正しいものに戻します。ブラウザはスクリプトが からダウンロードされたと認識しているので、にs を*.apisite.com作成できると思いました。ただし、これは当てはまらないようです。同じオリジン ポリシー エラーが引き続き発生します。XMLHTTPRequest*.apisite.com

私は何を間違っていますか?

私がやっていることの基本的な考え方は次のとおりです。

<!DOCTYPE html>
<html>
    <head>
        <!-- this will actually be downloaded from my own local server -->
        <script src="http://x.apisite.com/script-0.js">
        <script src="http://y.apisite.com/script-1.js">
...

ではtoscript-0.jsを作成し、 同様にでは にアクセスします。XMLHTTPRequestx.apisite.comscript-1.jsy.apisite.com

4

1 に答える 1

1

実用的な回答 (非推奨): 自分が管理しているドメインからサード パーティ ドメインへの CNAME レコードを作成し、それらのドメインを使用して、サード パーティのホストが HTTP Host ヘッダーを見ないようにします。クライアントがサードパーティのホストを認証しようとすると、これは機能しないことに注意してください。たとえば、HTTPS を使用する場合 (一部のクライアント ブラウザーは、特定のシナリオで HTTPS の使用を強制する場合があります)。

理想的な答え: CORS を使用してオリジン ドメインからのコードからのリクエストを承認するようサードパーティに依頼します (一部のホストは、任意のオリジンからのコードからのリクエストを既に許可しているため、確認する必要があります)。

代替案: サードパーティが、ドメインのコードを使用してクロスオリジン リクエストを作成する許可をクライアントに与えたくない場合は、それらのリクエストを自分で (サーバーから) 作成する必要があります。クライアントブラウザに送信するコードは、同じオリジンとのみやり取りしますが、これは、ユーザーのリクエストをプロキシしている場合 (関連する場合)、ユーザーが自分の資格情報であなたを信頼する必要があること、または資格情報を持っている必要があることも意味します。サードパーティのホストに対してサーバーを認証するために独自のものを使用して、そこでやりたいことを何でもできるようにします。また、アプリケーションによっては、トラフィックの負荷が大きい場合とそうでない場合があります。他にも多くの影響が潜在的にありますが、これらはすべて、これらの要求に対して明示的に責任を負うという事実から派生しています。

注: これは少し複雑に聞こえるかもしれませんが、ユーザー、ユーザーのクライアント ブラウザー、ブラウザーで実行されているコード、そのコードの起源、およびそのコードが要求を行うドメインの間の信頼の仕組みを理解することは有用です。 . 常に各当事者の最善の利益を念頭に置いてください。そうすれば、特定の問題の解決策を簡単に見つけることができます。

最終的な答え (誰もがそれを嫌っていますが、おそらくあなたはそれを期待していたでしょう): (ごめん。)

于 2013-07-29T12:49:16.353 に答える