【问题标题】:Request header field Authorization is not allowed (AngularJS rest api request)请求头域 Authorization is not allowed (AngularJS rest api request)
【发布时间】:2018-06-14 03:17:15
【问题描述】:

我有用 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 中执行而不出错?

【问题讨论】:

  • 检查请求头是否包含以下内容:Accept: application/xml?
  • 我试过了,但没有帮助。顺便说一下,响应是json格式的。

标签: javascript angularjs node.js rest


【解决方案1】:

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

CORS 限制仅适用于在 浏览器 中运行的应用程序。所以在 NodeJS(服务器端)上运行的“相同”的 JavaScript 代码不会有这样的限制。

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

作为修复,我建议你创建一个服务器端代理,所以

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

【讨论】:

    猜你喜欢
    • 2023-03-11
    • 2016-08-20
    • 2018-05-01
    • 2018-02-28
    • 2017-10-23
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    • 2020-02-16
    相关资源
    最近更新 更多