我正在尝试为我们的JIRA板开发D3可视化项目,但我已经陷入了第一道障碍。我在验证和获取JIRA板列表时遇到了麻烦。
此代码完全是客户端的,位于Angular 2 RC 3中。我的服务如下所示:
public authenticate( username:string, password:string ):void {
let encodedAuth:string = window.btoa( `${username}:${password}` );
this.headers = new Headers();
this.headers.append( 'Content-Type', 'application/json' );
this.headers.append( 'Authorization', `Basic ${encodedAuth}` );
}
public getAllBoards():Observable<Boards> {
return this.http.get( `http://${this.host}/rest/agile/1.0/board`, this.headers )
.map( response => response.json() as Boards )
}
我的组件中的代码如下所示:
constructor( protected jiraService:JIRAService ) {
this.jiraService.authenticate('me@you.com', 'password');
this.jiraService.getAllBoards().subscribe(
boards => this.boards = boards
);
}
不幸的是,这会在我的浏览器中生成看起来像CORS的错误:
XMLHttpRequest cannot load https://myjira.atlassian.net/rest/agile/1.0/board. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access. The response had HTTP status code 401.
......这有点出乎意料。浏览器中的相同URL工作正常。检查Charles中的请求我看到错误“此主机未启用SSL代理:在代理设置中启用,SSL位置”,但实际上无法找到此设置。我不在乎我实际上是不是在Charles看到它,我只想让它工作!
我已经尝试了几个npm JIRA软件包,但它们都不是很出色,似乎是为服务器端开发而设计的。
非常感谢任何帮助。
答案 0 :(得分:0)
从最初从其他URL加载的应用程序中访问它时,会出现此错误。如果您从这个“其他”URL加载新页面,那么这不是CORS情况,因为初始页面加载已经来自此URL。
服务器需要为浏览器提供预期的CORS标头以允许此请求。这不是Angular问题,只是服务器问题。
解决方法