Access-Control-Allow-Origin有办法解决吗?

时间:2015-05-11 01:20:25

标签: javascript jquery api cross-domain

我正在使用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?感谢

1 个答案:

答案 0 :(得分:2)

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

使用浏览器时,服务器决定是否支持跨源请求以及它希望支持哪些域请求。你无法在客户端中绕过它。

选择是:

  1. 服务器允许从您的域或所有域访问COR。
  2. 服务器支持JSONP,允许您使用它来解决跨源访问。
  3. 您创建自己的服务器代理,从浏览器向您自己的服务器发出请求(可能是同一个来源或启用了CORS),然后您自己的服务器从其他站点获取数据并将其返回给浏览器。服务器不受相同原始限制的限制,因为这是仅在浏览器中内置的安全功能。
  4. 您可以找到一些第三方代理服务,您可以将其用于与选项#3相同的目的。
  5. 仅供参考,谷歌搜索出现了关于在API上启用CORS的文章:https://answers.atlassian.com/questions/69356/cross-origin-resource-sharing-with-jira-rest-api-and-javascript。我不太了解该服务以完全遵循这篇文章,但也许​​它指出了一个有用的方向。