有没有办法绕过 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 服务器和应用程序堆栈的配置。
祝你好运!
没有外部代码,无法完全从浏览器启用跨源请求。如果有的话,它首先会完全破坏安全保护的目的。
使用浏览器时,由服务器决定是否要支持跨源请求以及它要支持来自哪些域的请求。你不能在客户端绕过它。
选项是:
- 服务器允许从您的域或所有域访问 COR。
- 服务器支持 JSONP,允许您使用它来解决跨源访问。
- 您创建自己的服务器代理,从浏览器向您自己的服务器发出请求(可能同源或启用 CORS),然后您自己的服务器从其他站点获取数据,然后 returns 它返回给浏览器。服务器不受同源限制的限制,因为这是仅内置于浏览器中的安全功能。
- 您找到一些第三方代理服务,您可以使用它来实现与选项 #3 相同的目的。
仅供参考,Google 搜索找到了这篇关于在 API 上启用 CORS 的文章:https://answers.atlassian.com/questions/69356/cross-origin-resource-sharing-with-jira-rest-api-and-javascript。我对这项服务的了解还不够,无法完全遵循这篇文章,但也许它为您指明了一个有用的方向。
我正在使用 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 服务器和应用程序堆栈的配置。
祝你好运!
没有外部代码,无法完全从浏览器启用跨源请求。如果有的话,它首先会完全破坏安全保护的目的。
使用浏览器时,由服务器决定是否要支持跨源请求以及它要支持来自哪些域的请求。你不能在客户端绕过它。
选项是:
- 服务器允许从您的域或所有域访问 COR。
- 服务器支持 JSONP,允许您使用它来解决跨源访问。
- 您创建自己的服务器代理,从浏览器向您自己的服务器发出请求(可能同源或启用 CORS),然后您自己的服务器从其他站点获取数据,然后 returns 它返回给浏览器。服务器不受同源限制的限制,因为这是仅内置于浏览器中的安全功能。
- 您找到一些第三方代理服务,您可以使用它来实现与选项 #3 相同的目的。
仅供参考,Google 搜索找到了这篇关于在 API 上启用 CORS 的文章:https://answers.atlassian.com/questions/69356/cross-origin-resource-sharing-with-jira-rest-api-and-javascript。我对这项服务的了解还不够,无法完全遵循这篇文章,但也许它为您指明了一个有用的方向。