繁体   English   中英

请求标头字段不允许授权(AngularJS rest api请求)

[英]Request header field Authorization is not allowed (AngularJS rest api request)

我有用AngularJS编写的应用程序。 我想访问FlightAware API。 我使用以下代码:

  let Client = require('node-rest-client').Client;

  let username = 'x';
  let apiKey = 'y';
  let fxmlUrl = 'https://flightxml.flightaware.com/json/FlightXML3/'

  let client_options = {
    user: username,
    password: apiKey
  }
  let client = new Client(client_options);

  client.registerMethod('findFlights', fxmlUrl + 'FindFlight', 'GET');
  client.registerMethod('weatherConditions', fxmlUrl + 'WeatherConditions', 'GET');

  let findFlightArgs = {
    parameters: {
        origin: 'KIAH',
        destination: 'KJFK',
        type: 'nonstop'
    }
  }

  let weatherConditionsArgs = {
    parameters: {
        airport_code: 'KHOU'
    }
  }

  client.methods.weatherConditions(weatherConditionsArgs, function (data, response) {
    console.log('Current conditions at Hobby Airport: %j', data.WeatherConditionsResult.conditions[0]);
  })

当我在nodeJS中执行它时,它可以工作,但是在我的AngularJS应用中,我收到一个错误: Request header field Authorization is not allowed by Access-Control-Allow-Headers in preflight response.

我发现一些信息,指出此错误与CORS有关,但是无论我使用AngularJS还是NodeJS来运行代码,服务器端都是相同的。 如何在AngularJS中无错误地执行它?

错误消息指出,FlightXML服务器( https://flightxml.flightaware.com )没有设置相应的CORS标头,而从浏览器运行该标头是必需的。 (如果从http://yoursite.com运行的浏览器应用程序从另一个主机(例如https://flightxml.flightaware.com )获取数据,则CORS为“ on”。)

CORS限制仅适用于在 浏览器中运行的应用程序。 因此,在NodeJS(服务器端)上运行的“相同” JavaScript代码将没有这种限制。

不幸的是,外部服务器必须设置Access-Control-Allow-Headers: Authorization标头,否则基于浏览器的方案将无法工作。 看来FlightXML不支持您的方案。

作为修复,建议您创建一个服务器端代理,因此

  1. 您的浏览器端代码不会直接从flightxml中读取数据,而是会调用您自己服务器的某些HTTP端点,例如http://yoursite.com/weather?args http://yoursite.com/weather?args...
  2. 您的服务器代码连接到flightxml(无CORS限制),仅返回所需的数据

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM