请求头域 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