ReactJS:已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查
Posted
技术标签:
【中文标题】ReactJS:已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查【英文标题】:ReactJS: has been blocked by CORS policy: Response to preflight request doesn't pass access control check 【发布时间】:2019-12-14 17:27:27 【问题描述】:我在 chrome 上遇到了这个问题:
访问 'http://******/places?holiday_type=resort¤cy=EUR&checkin=2019-11-01&checkout=2019-11-10&groups[]=1' 来自原点“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)
【问题讨论】:
您请求哪种后端语言和框架,Java、Node.js 等? 这是一个外部API,我不知道它是什么语言。它适用于邮递员 该外部 api 正在阻止来自客户端的请求,因此您需要为前端创建一个后端并从该后端发出您的请求以传递 cors 好吧,我想用 Java Spring boot 测试它谢谢@onuriltan 【参考方案1】:外部 API 通常会阻止此类请求。我猜您正在为您的请求使用类似于 API-Key 的东西,其中包括根据您的呼叫付款。问题是,当您在前端调用 API 时,每个用户都可以读取您的密钥。这就是服务器阻止这些的原因。
您需要自己创建一个服务器(例如使用 node.js),调用您的后端 API,然后使用您的 API 密钥将您的请求“转发”到公共 API。 服务器到服务器的请求不会被阻止,您的用户也无法利用您的 API 密钥。 如果你想公开它,你还应该确保你的后端服务器不接受不是你的前端的请求。
【讨论】:
【参考方案2】:CORS 通过添加新的 HTTP 标头来工作,这些标头允许服务器描述允许使用 Web 浏览器读取该信息的源集。这必须在服务器中配置为允许跨域。
您可以通过一个名为 CORS 的 chrome 插件暂时解决此问题。
复制自: How to allow CORS in react.js?
参考:How to overcome the CORS issue in ReactJS?
【讨论】:
以上是关于ReactJS:已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查的主要内容,如果未能解决你的问题,请参考以下文章
使用反应返回 405 错误获取快速后端(来自原点'null'已被 CORS 策略阻止:对预检等的响应......)
来源已被 CORS 策略阻止 对预检请求的响应未通过访问控制检查
ReactJS:对 fetch 的访问已被 CORS 策略阻止
domain.com 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:它没有 HTTP ok 状态
如何解决这个“http://localhost:8080”已被 CORS 策略阻止:对预检请求的响应未通过 vueJS 中的访问控制?