重新飞行的响应具有无效的 HTTP 状态代码 500



我正在尝试对Yelp Fusion API进行简单的ajax调用。我使用 Yelp 提供的client_id和client_secret在 Postman 中进行"POST"调用,并根据 Yelp API 文档接收访问令牌。此访问令牌可用于对 api 调用进行身份验证。获取访问令牌后,我使用 Postman 对/business/search 终结点进行"GET"调用并获取相关的业务信息。下图显示了进行调用所需的相应标头和参数:

邮递员标头、参数和响应

在邮递员中点击"发送"后,JSON 响应代码显示在邮递员(上一张图片的底部(中,这就是我正在寻找的结果。Postman 还有一个功能来生成调用所需的代码,我将他们生成的 ajax 请求插入到我的程序中:

var settings = {
"async": true,
"crossDomain": true,
"url": "https://api.yelp.com/v3/businesses/search?term=delis&latitude=37.786882&longitude=-122.399972",
"method": "GET",
"headers": {
"authorization": "Bearer 0P*****************x",
"cache-control": "no-cache",
"postman-token": "30*************7"
},
"data": {
"grant_type": "client_credientials",
"client_secret": "tp***************m",
"client_id": "RO**********w"
}
}
$.ajax(settings).done(function (response) {
console.log(response);
});

现在,当在我的页面上单击提交按钮时,我想在控制台中显示响应。但是,虽然 Postman 似乎能够正确进行 ajax 调用并收到正确的响应,但 Google Chrome 浏览器显示以下错误:预检响应具有无效的 HTTP 状态代码 500。据我了解,当 OPTIONS 方法向资源发出 HTTP 请求以确定实际请求是否可以安全发送时,第一个错误发生在预检请求中。但是,我对邮递员如何毫无问题地拨打电话感到困惑,但谷歌浏览器却不能。任何帮助,不胜感激。

这是一个典型的 CORS 场景

预检请求是浏览器发出的跨域调用的 HTTP 请求,用于检查您的域是否具有正确的"权限"来确定实际请求是否可以安全发送

预检请求会仔细检查服务器是否设置了某些标头:例如

"Access-Control-Allow-Origin": "*" 
"Access-Control-Allow-Methods": "GET, POST"
"Access-Control-Allow-Headers: "X-Custom-Header"

基本上指定了被授予访问权限的域列表,允许方法(获取,放置,发布等(和允许标头。 您在 Postman 中看不到此错误,因为它不会向服务器发出任何预检请求,它只是绕过任何与 CORS 相关的问题

由于您无法控制Yelp Fusion API后端,因此您可以制作一个简单的后端来发出请求(Cors似乎不受支持(

最新更新