emi*_*o34 2 javascript fetch reactjs
我在 chrome 上失败了:
访问 'http://******/places?holiday_type=resort¤cy=EUR&checkin=2019-11-01&checkout=2019-11-10&groups[]=1' 来自 origin ' http://localhost:3000 ' 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:预检请求不允许重定向。
我的代码是:
getPlaces = async () => {
try {
let response = await fetch(`${BASE_URL}/places?holiday_type=resort¤cy=EUR&checkin=2019-11-01&checkout=2019-11-10&groups[]=1`,
{
method: 'GET',
headers: new Headers({
'Accept': 'application/json',
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Headers': 'Origin, X-Requested-With, Content-Type, Accept, Authorization',
'Access-Control-Request-Method': 'GET, POST, DELETE, PUT, OPTIONS',
'Authorization': 'Basic ' + Base64.encode(apiuser + ':' + apipassword) ,
}),
})
console.log(response)
} catch (error) {
console.log(error)
}
Run Code Online (Sandbox Code Playgroud)
}
外部 API 通常会阻止这样的请求。我猜您正在为您的请求使用 API-Key 之类的东西,其中包括根据您的调用付款。问题在于,当您在前端调用 API 时,每个用户都可以读取您的密钥。这就是服务器阻止这些的原因。
您需要自己创建一个服务器(例如使用 node.js),调用您的后端 API,然后使用您的 API 密钥将您的请求“转发”到公共 API。服务器到服务器请求不会被阻止,您的用户也无法利用您的 API 密钥。如果您想将其公开,您还应该确保您的后端服务器不接受不是您前端的请求。
小智 6
CORS 的工作原理是添加新的 HTTP 标头,这些标头允许服务器描述允许使用 Web 浏览器读取该信息的源集。必须在服务器中配置允许跨域。
您可以通过一个名为 CORS 的 chrome 插件暂时解决此问题。
复制自: 如何在react.js中允许CORS?