Github API和Access-Control-Allow-Origin

时间:2013-02-05 10:49:19

标签: ajax github cors github-api

这可能是一个简单的(系列)问题,但我无法绕过它。

我正在尝试从我网站上托管的网络应用访问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>

如果我将浏览器指向上传on my dropbox account的这个简单页面,一切正常。 相反,如果我将浏览器指向上传on my site的这个简单页面,我会得到臭名昭着的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它甚至可以在网站上运行。这是将Access-Control-Allow-Origin: *.github.com放在我的Apache配置上的问题。但是,引自en.wiki,
  

但是,这可能不适合担心安全的情况

  • 有没有办法在不更改Apache配置的情况下执行此操作?可能,我无法触及我的托管网站的Apache conf,并且始终存在安全问题。这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:9)

为了让CORS适用于您的网站(例如http://example.com),您必须在此处创建GitHub OAuth应用程序来启用它:https://github.com/settings/applications

由于您使用GitHub应用程序来使CORS正常工作(不使用它来启用OAuth本身),您只需在“创建应用程序表单”的所有三个字段中输入您网站的URL:

请注意,如果您打算使用OAuth功能,则需要以不同方式设置回调网址。

在此之后,您应该能够从您的网站http://example.com向您的GitHub API发送AJAX请求。