有没有办法绕过 Access-Control-Allow-Origin?

Is there a way around Access-Control-Allow-Origin?

我正在使用 JIRA 中的 API 来获取有关错误的一些信息。这是我用来获取它的 JQuery 的示例:

var endpoint = 'https://jira.cyanogenmod.org/rest/api/latest/issue/CYAN-2631';
$.get(endpoint, function(data) {
    do_stuff(data, data['fields']['project']['self']);
});

而且,我遇到了非常可怕的 Access-Control-Allow-Origin 错误。它看起来像这样:

XMLHttpRequest cannot load 
https://jira.cyanogenmod.org/rest/api/latest/issue/CYAN-2631. 
No 'Access-Control-Allow-Origin' header is present on the requested resource. 
Origin 'http://127.0.0.1:8000' is therefore not allowed access.

如果可能的话,我真的很想使用这个 API。按照 question 上的说明进行操作并没有帮助。我收到另一个错误,

GET https://jira.cyanogenmod.org/rest/api/latest/issue/CYAN-2631callback=jQuery172039181585889309645_1431307158851?_=1431307165515 

似乎是 Jquery 错误,所以我认为这不是正确的方法。可能服务器不允许 jsonp

无论如何,有没有人有办法解决这个问题,或者我可以不使用这个特定的 API 吗?谢谢

H-i,简短的回答是 "yes"。

中等答案是"enable CORS on your application SERVER"

长答案在这里:http://enable-cors.org/

有时您会遇到 "pre-flight request" 的概念,您可能会感到困惑。

那是因为它令人困惑、愚蠢且设计不佳。继续前进。

启用 CORS 的最简单方法是在您的网络服务器(nginx 或 apache)上,不过,您可以在应用程序本身中启用它。

http://enable-cors.org/ 站点列出了各种 Web 服务器和应用程序堆栈的配置。

祝你好运!

没有外部代码,无法完全从浏览器启用跨源请求。如果有的话,它首先会完全破坏安全保护的目的。

使用浏览器时,由服务器决定是否要支持跨源请求以及它要支持来自哪些域的请求。你不能在客户端绕过它。

选项是:

  1. 服务器允许从您的域或所有域访问 COR。
  2. 服务器支持 JSONP,允许您使用它来解决跨源访问。
  3. 您创建自己的服务器代理,从浏览器向您自己的服务器发出请求(可能同源或启用 CORS),然后您自己的服务器从其他站点获取数据,然后 returns 它返回给浏览器。服务器不受同源限制的限制,因为这是仅内置于浏览器中的安全功能。
  4. 您找到一些第三方代理服务,您可以使用它来实现与选项 #3 相同的目的。

仅供参考,Google 搜索找到了这篇关于在 API 上启用 CORS 的文章:https://answers.atlassian.com/questions/69356/cross-origin-resource-sharing-with-jira-rest-api-and-javascript。我对这项服务的了解还不够,无法完全遵循这篇文章,但也许​​它为您指明了一个有用的方向。