You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署在AWS Amplify的React应用遇CORS跨域问题,前端如何解决?

前端侧可实施的解决方案

1. 启用no-cors模式(仅适用于无需读取响应的场景)

如果你的请求只需要完成数据提交,不需要获取API返回的内容、状态码等信息,可以在fetch请求中添加mode: 'no-cors'配置,让浏览器跳过CORS校验。但这种模式下,你无法读取响应的任何内容,返回的是浏览器无法解析的不透明响应。示例代码:

fetch('API_END_POINT', {
  method: 'POST', // 或GET
  mode: 'no-cors',
  headers: {
    // 注意:no-cors模式仅允许设置安全头,Content-Type只能是application/x-www-form-urlencoded、multipart/form-data或text/plain
    'Content-Type': 'application/x-www-form-urlencoded'
  },
  body: // 你的请求体数据
});

2. 利用AWS Amplify的重写代理(推荐方案)

既然你的应用部署在AWS Amplify上,可以通过Amplify的重写与重定向功能搭建代理,让请求通过Amplify服务器转发,绕过浏览器的CORS限制:

  • 登录AWS Amplify控制台,找到你的目标应用
  • 进入「重写与重定向」页面
  • 添加一条重写规则:
    • 源地址:/api-proxy/<*>
    • 目标地址:你的API实际地址/<*>(替换成真实的API_END_POINT,保留<*>以匹配后续路径)
    • 规则类型选择「200 (Rewrite)」
  • 修改React代码中的请求地址,将原本的API_END_POINT替换为/api-proxy/开头的路径,比如原请求https://xxx.com/api/get-data改为/api-proxy/api/get-data

这种方式通过服务器端转发请求,不受浏览器CORS规则限制,且能正常读取API的响应内容,是最适合你当前部署环境的方案。

3. 本地与Amplify部署差异的原因

本地运行时无CORS问题,通常是因为React开发服务器(如webpack-dev-server)或你配置的package.json中的proxy字段帮你转发了请求,相当于本地搭建了临时代理,绕过了浏览器的CORS校验。而部署到Amplify后,没有了本地开发服务器的代理机制,直接从浏览器发起跨域请求就触发了CORS拦截。


内容的提问来源于stack exchange,提问作者Hideharu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 01:52:34