gpt4 book ai didi

javascript - 请求头字段不允许授权(AngularJS Rest api 请求)

转载 作者:行者123 更新时间:2023-12-03 02:45:54 24 4
gpt4 key购买 nike

我有用 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 应用程序中我收到错误:预检响应中的 Access-Control-Allow-Headers 不允许请求 header 字段授权。

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

最佳答案

错误消息指出,FlightXML 服务器 ( https://flightxml.flightaware.com ) 未设置相应的 CORS header ,而从浏览器运行需要设置相应的 CORS header 。 (如果从http://yoursite.com运行的浏览器应用程序从另一个主机获取数据,例如https://flightxml.flightaware.com,则CORS处于“开启”状态)

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

不幸的是,外部服务器需要设置Access-Control-Allow-Headers: Authorization header ,否则您的基于浏览器的方案将无法工作。看起来 FlightXML 不支持您的场景。

作为修复,我建议您创建一个服务器端代理,这样

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

关于javascript - 请求头字段不允许授权(AngularJS Rest api 请求),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48094476/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com