请求头域 Authorization is not allowed (AngularJS rest api request)

Posted

技术标签:

【中文标题】请求头域 Authorization is not allowed (AngularJS rest api request)【英文标题】:Request header field 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格式的。 【参考方案1】:

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

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

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

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

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

【讨论】:

以上是关于请求头域 Authorization is not allowed (AngularJS rest api request)的主要内容,如果未能解决你的问题,请参考以下文章

请求头字段 Authorization is not allowed by Access-Control-Allow-Headers Error

解决The VMware Authorization Service is not run的情况

启动VMware出现报错:The VMware Authorization Service is not running

启动VMware出现报错:The VMware Authorization Service is not running

打开VMware Workstation 时出现 The VMware authorization service is not running

http报文头域详解