2013-02-05 20 views
5

điều này có lẽ là một câu hỏi đơn giản (s) nhưng tôi không thể quấn đầu xung quanh nó.Github API và Access-Control-Allow-Origin

Tôi đang cố truy cập api github từ một ứng dụng web được lưu trữ trên trang web của tôi. Đây là đoạn mã tóm tắt:

<!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> 

Nếu tôi trỏ trình duyệt của mình đến trang đơn giản này tải lên on my dropbox account mọi thứ đều ổn. Nếu, thay vào đó, tôi chỉ trình duyệt của tôi để trang đơn giản này được tải lên on my site, tôi nhận được khét tiếng Access-Control-Allow-Origin ngoại lệ:

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

Vì vậy, các câu hỏi:

  • Tại sao nó làm việc trên Dropbox?
  • Tôi hiểu rằng với CORS nó sẽ hoạt động ngay cả trên trang web. Đây là vấn đề đặt Access-Control-Allow-Origin: *.github.com vào cấu hình Apache của tôi hoặc một cái gì đó tương tự. Nhưng, như trích dẫn từ en.wiki,

Tuy nhiên, điều này có thể không thích hợp cho các tình huống trong đó an ninh là một mối quan tâm

  • Có cách nào để làm điều này mà không thay đổi Cấu hình Apache? Có lẽ, tôi không thể chạm vào conf của Apache của trang web lưu trữ của tôi, và luôn luôn có mối quan tâm an ninh. Cách đúng để làm điều này là gì?
+0

Dropbox hoạt động tốt cho tôi. Tôi đã cố gắng đăng ký một ứng dụng mới, nhưng tôi thẳng thắn không biết phải đặt gì vào trường URL gọi lại:) Bạn có thể cho tôi một số gợi ý về cách thiết lập điều này không? (liên kết bạn đăng không cung cấp cho tôi bất kỳ gợi ý nào) – janesconference

+0

Xin lỗi, lỗi của tôi, có vẻ như công ty của tôi đang lọc tất cả lưu lượng truy cập đến dropbox như gần đây. Sẽ có một cái nhìn khi tôi về nhà :) –

+0

Đây là những gì tôi đã thiết lập cho trang của tôi đang sử dụng GH API: Tên: ivanzuzak.info URL: ivanzuzak.info URL gọi lại: ivanzuzak.thông tin Vì vậy, mọi thứ đều giống nhau nếu bạn chỉ cần gọi API từ trang tĩnh, đó là tình huống của bạn. Bạn thực sự không cần URL gọi lại cho kịch bản sử dụng của mình, vì bạn chỉ muốn bật CORS cho miền và không sử dụng OAuth. –

Trả lời

7

Để nhận CORS làm việc cho trang web của bạn (ví dụ http://example.com), bạn phải kích hoạt nó bằng cách tạo ra một ứng dụng GitHub OAuth đây: https://github.com/settings/applications

Vì bạn đang sử dụng một ứng dụng GitHub để có được CORS làm việc (không sử dụng nó cho phép OAuth chính nó), bạn chỉ có thể nhập URL của trang web của bạn trong cả ba lĩnh vực trong "Tạo hình thức ứng dụng":

Lưu ý rằng nếu bạn có ý định sử dụng chức năng OAuth, bạn cần phải thiết lập URL Callback khác nhau.

Sau đó, bạn sẽ có thể gửi yêu cầu AJAX tới API GitHub từ trang web của bạn http://example.com.

Các vấn đề liên quan