javascript - 如何摆脱 React.js 中的 NO ACCESS CONTROL ORIGIN 错误?
问题描述
我正在尝试从我使用 React.js 的 fetch 方法的 API 中获取数据。但我经常看到这个错误
CORS 策略已阻止
https://api.edamam.com/search?q=chicken&app_id=${APP_ID}&app_key=${APP_KEY}
从源获取的访问权限:请求的资源上不存在“Access-Control-Allow-Origin”标头。http://localhost:3000
如果不透明的响应满足您的需求,请将请求的模式设置为“no-cors”以获取禁用 CORS 的资源。
我禁用了扩展等,但我想这需要在请求中添加一些额外的标头等。请帮忙。
解决方案
这个问题与 React 无关,而是与 CORS 相关。从文档
Cross-Origin Resource Sharing (CORS) is a mechanism that uses additional HTTP headers to tell browsers to give a web application running at one origin, access to selected resources from a different origin. A web application executes a cross-origin HTTP request when it requests a resource that has a different origin (domain, protocol, or port) from its own.
这是需要在服务器端解决的问题。需要添加的不是标头中的请求,而是响应中的请求。具体来说,您需要添加Access-Control-Allow-Origin
.
要了解 CORS 存在的原因,请考虑我创建了一个可以代表您向 Gmail 发出网络请求的网站。这使我能够阅读您的电子邮件。浏览器会阻止这种情况,因此只有 Gmail 可以读取 Gmail。
您的问题可能还有其他解决方案,具体取决于您尝试与之通信的 API、您的设置以及您有哪些限制。如果您正在使用create-react-app
,快速修复可能是将其添加到您的package.json
:
"proxy": "https://api.edamam.com",
现在https://api.edamam.com
从您的 fetch 调用中删除。所以代替fetch('https://api.edamam.com/path/to/server')
, 你需要做fetch('/path/to/server')
, 注意你需要重启开发服务器。您可以在此处阅读有关其工作原理的更多信息
推荐阅读
- windows - 我们可以使用 CNG(Windows Cryptography API)生成 BCrypt / SCrypt / Argon2 哈希密码吗?
- r - 执行 R 代码嵌套 IF 条件时出错
- python - 使用 Ansible 从一行文本中提取两个字符串
- gcc - gcc 预处理输出的格式
- reactjs - React 函数式组件有大小限制吗?
- puppeteer - 剧作家 - 如何检查元素是否在视口中?
- r - 以 95% CI 重复回归进行估计
- c# - WPF 设计器在 Visual Studio 2015 中不可见
- laravel - Laravel 文件上传:未检测到文件
- r - 以与显示的顺序相同的顺序从一列分组数据中过滤不同值的列表