我目前正在开发一个项目,我需要访问连接到已确定的Rabbitmq的所有队列。为此,我试图使用rabbitmq的RESTful服务获取此信息。我尝试使用POSTman做一些例子,比如发送一个请求到localhost:15672 / api / connections with guest:guest作为用户名和密码,一切正常;但是,当我尝试使用我在Angular上的项目发送相同的请求时,出现以下错误消息:
zone.js:2177 XMLHttpRequest无法加载localhost:15672 / api / overview。交叉源请求仅支持协议方案:http,数据,chrome,chrome-extension,https。
我对这个错误进行了一些研究,我发现的所有解决方案都建议我允许Chrome上的浏览器发出CORS请求,但这个解决方案要求我更改每个运行我项目的浏览器,没有效果。任何人都知道使用Angular 2应用程序获取Rabbitmq信息的另一种方式吗?
提前致谢!
编辑:
此外,如果我在请求开头添加“http://”,则错误消息将更改为:
XMLHttpRequest无法加载http://localhost:15672/api/overview。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许原点“http://localhost:4200”访问。响应的HTTP状态代码为405。
以下是我的代码的样子:
@Injectable()
export class RabbitHttp {
protected headers: Headers;
constructor(private http: Http, private router: Router,
public globalService: GlobalService
) {
}
public get(url: string, parameters: any): Promise<Response> {
url = "http://" + url;
this.setDefaultHeaders(parameters, url);
return this.http.get(url, { headers: this.headers }).toPromise();
};
private setDefaultHeaders(data: any, url: string): void {
this.headers = new Headers();
this.headers.append("Content-Type", "application/json");
this.headers.append("Authorization", "Basic " + data);
this.headers.append("Access-Control-Allow-Origin", url);
}
}
使用命令
启用的6个默认插件启动了Rabbit服务rabbitmq-plugins启用rabbitmq_management
对于url和参数,函数中收到的url是localhost:15672 / api / overview,参数是guest:guest
答案 0 :(得分:0)
当请求包含Origin
标头(match_origin
函数)时,您可以在this code中看到返回的CORS标头 。
使用Angular创建的请求必须包含Origin
标题。