当前位置: 首页 > 面试题库 >

Github API和Access-Control-Allow-Origin

淳于哲
2023-03-14
问题内容

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

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

如果我将浏览器指向在我的保管箱帐户上载的这个简单页面,则一切正常。相反,如果我将浏览器指向该网站上上传的这个简单页面,则会得到臭名昭著的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,并且始终存在安全隐患。什么是正确的方法?

问题答案:

为了使CORS适用于您的网站(例如http://example.com),您必须通过在以下位置创建GitHub
OAuth应用程序来启用它:https :
//github.com/settings/applications

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

  • 名称:http://example.com
  • 网址:http://example.com
  • 回调网址:http://example.com

请注意,如果您打算使用OAuth功能,则需要以其他方式设置回调URL。

之后,您应该能够从站点http://example.com将AJAX请求发送到GitHub API 。



 类似资料:
  • Access-Control-Allow-Origin响应 header 指示是否该响应可以与具有给定资源共享原点。 Header type Response header Forbidden header name no 语法 Access-Control-Allow-Origin: *Access-Control-Allow-Origin: <origin> 指令 * 对于没有凭据的请求,服务

  • 的Access-Control-Allow-Headers响应报头在响应用于一个预检请求指示哪个HTTP标头将通过提供Access-Control-Expose-Headers使实际的请求时。 的简单标头,Accept,Accept-Language,Content-Language,Content-Type(任一,但仅与一个MIME类型其解析值的(忽略参数)application/x-www-f

  • Access-Control-Allow-Credentials响应报头指示的请求的响应是否可以暴露于该页面。当true值返回时它可以被暴露。 凭证是 Cookie ,授权标头或 TLS 客户端证书。 当作为对预检请求的响应的一部分使用时,它指示是否可以使用凭证进行实际请求。请注意,简单的GET请求不是预检的,所以如果请求使用凭证的资源,如果此资源不与资源一起返回,浏览器将忽略该响应,并且不会返回

  • XMLHttpRequest无法加载http://localhost:8080/nobelgrid/api/users/create/。请求的资源上没有“访问-控制-允许-来源”标头。因此,不允许访问源'http://localhost:63342'。响应的HTTP状态代码为500。 谁能帮帮我吗? 更新: 但我还有一个错误。我会做另一个问题,因为我认为这是一个不同的论点。 提前感谢!

  • 问题内容: 我正在尝试使用发布请求将文件发送到服务器,但是在发送请求时会导致错误: Access-Control-Allow-Headers不允许请求标头字段Content-Type。 所以我搜索了错误并添加了标题: 然后我得到错误: Access-Control-Allow-Headers不允许请求标头字段Access-Control-Allow-Origin 所以我用谷歌搜索,唯一能找到的类似

  • 我正在尝试将文件发送到我的服务器,并发送post请求,但当它发送时会导致错误: Access-Control-Allow-Headers不允许请求标头字段Content-Type。 所以我搜索了这个错误并添加了标题: 然后我得到错误: