13

これはおそらく単純な(一連の)質問ですが、頭を悩ませることはできません。

サイトでホストされている Web アプリから github api にアクセスしようとしています。これは一言で言えばコードです:

<!DOCTYPE html>
<html>
<head>
  <style>p { color:red; }</style>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
  <script>
  $(document).ready(function () {

$.ajax( {url :'https://api.github.com/repos/janesconference/kievIIPlugins/commits', dataType: "json", cache: false, success: function (data, textStatus, jqXHR)
        {
            var lastCommitSha = data[0].sha;
            $("p").text("Last commit SHA: " + lastCommitSha);
        }
    });
});
  </script>

</head>
<body>
  <p>Ajax request not (yet) executed.</p>

</body>
</html>

Dropbox アカウントにアップロードされたこのシンプルなページにブラウザを向けると、すべて問題ありません。代わりに、自分のサイトにアップロードされたこの単純なページをブラウザで指定すると、悪名高いAccess-Control-Allow-Origin例外が発生します。

XMLHttpRequest cannot load https://api.github.com/repos/janesconference/kievIIPlugins/commits?_=1360060011783. Origin http://bitterspring.net is not allowed by Access-Control-Allow-Origin.

だから、質問:

  • なぜ Dropbox で動作するのですか?
  • CORS を使用すると、Web サイトでも機能することを理解しています。これは、Access-Control-Allow-Origin: *.github.com私の Apache 構成などを適用することの問題です。しかし、en.wiki から引用したように、

ただし、これはセキュリティが懸念される状況には適していない可能性があります

  • Apache の設定を変更せずにこれを行う方法はありますか? おそらく、ホスティング サイトの Apache conf にアクセスすることはできず、常にセキュリティ上の懸念があります。これを行う正しい方法は何ですか?
4

1 に答える 1

12

サイト (例: http://example.com ) でCORS を機能させるには、 https ://github.com/settings/applications で GitHub OAuth アプリケーションを作成して有効にする必要があります。

CORS を機能させるために GitHub アプリケーションを使用しているため (OAuth 自体を有効にするために使用するのではなく)、「アプリケーションの作成フォーム」の 3 つのフィールドすべてにサイトの URL を入力するだけです。

OAuth 機能を使用する場合は、コールバック URL を別の方法で設定する必要があることに注意してください。

この後、サイトhttp://example.comから AJAX リクエストを GitHub API に送信できるようになります。

于 2013-02-05T14:29:34.390 に答える