Angular 2 Http获取请求标头问题

时间:2017-02-06 09:48:21

标签: http angular get header cors

我的Angular 2服务正在调用和外部api,但我在浏览器控制台中收到错误。我尝试将标头添加到Get方法,但仍然存在错误。

服务

import { Injectable } from '@angular/core';
import { Http,Headers } from '@angular/http';
import 'rxjs/add/operator/map';

@Injectable()

export class CompetitionService{

     constructor(private http:Http){

     }

    getCompetitions(){
        let headers = new Headers();
        headers.append('Access-Control-Allow-Credentials', 'true');
        headers.append('Access-Control-Allow-Methods', 'GET');
        headers.append('Access-Control-Allow-Origin', '*');
        return this.http.get('http://api.football-data.org/v1/competitions',{headers:headers}).map(response => response.json())
    }
}

控制台日志在标题之前

  

XMLHttpRequest无法加载   http://api.football-data.org/v1/competitions。没有   请求中存在“Access-Control-Allow-Origin”标头   资源。因此不允许来源“http://localhost:3000”   访问。

Header之后     XMLHttpRequest无法加载http://api.football-data.org/v1/competitions。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许原点“http://localhost:3000”访问。

1 个答案:

答案 0 :(得分:1)

这是浏览器和足球数据api中的CORS问题

http://api.football-data.org/docs/v1/index.html#_cors_handling

  

但是,如果直接从Javascript实现请求,则需要   正确添加您的X-Auth-Token,以便API授予您权限   那样做

所以要从您的应用中调用api,您需要添加标题:

getCompetitions(){
    let headers = new Headers();
    let token = 'your token';
    headers.append('X-Auth-Token', token);
    return this.http.get('http://api.football-data.org/v1/competitions',{headers:headers}).map(response => response.json())
}