Idl*_*ion 11 cors reactjs axios
我在前端使用 React,我从另一个我不拥有的域调用 API。我的 axios 请求:
axios(requestURL, {
method: 'GET',
headers: {
'Access-Control-Allow-Origin': '*',
'Content-Type': 'application/json',
'Authorization': key,
withCredentials: true,
mode: 'no-cors',
}
Run Code Online (Sandbox Code Playgroud)
我不断收到相同的错误:缺少 CORS 标头“Access-Control-Allow-Origin”。这是我可以从前端克服的东西吗?我知道人们使用该 API 的事实,因此它不会是后端错误,对吗?我尝试请求很多 API,甚至没有一个可以使用我的代码。我尝试使用https://cors-anywhere.herokuapp.com并且它工作正常大约一个星期,我认为今天它失败了。我希望我的网站保持 24/7,所以使用代理不是一种选择
不幸的是,您需要以某种方式代理请求。出于安全原因,浏览器将阻止 CORS 请求。为了避免这种情况,后端需要为您注入允许源头。
解决方案取决于您需要代理、开发或生产的位置。
开发环境或 node.js 生产 webserver
在这种情况下,最简单的方法是使用“http-proxy-middleware” npm 包
const proxy = require('http-proxy-middleware');
module.exports = function (app) {
app.use(proxy('/api', {
target: 'http://www.api.com',
logLevel: 'debug',
changeOrigin: true
}));
};
Run Code Online (Sandbox Code Playgroud)
生产 - 您拥有完全访问权限的 Web 服务器 检查以下页面以了解如何在您的 Web 服务器上启用此类代理:
https://enable-cors.org/server.html
生产 - 静态托管/没有完全访问权限的 Web 服务器
如果您的主机支持 PHP,您可以添加一个 php 脚本,如:https : //github.com/softius/php-cross-domain-proxy
然后从您的应用程序向脚本发出请求,脚本将转发它并在响应中注入标头
如果您的主机不支持 PHP 不幸的是,您将需要依赖于您使用过的解决方案。
为了避免依赖第三方服务,您应该在您将使用的某个地方部署一个代理脚本。
我的建议是:
转移到支持 php 的主机:)(Netlify 可能是一个解决方案,但我不确定)
例如,您可以将自己的基于 node.js 的代理脚本部署到 Firebase(firebase 函数),以确保它不会神奇地停机,并且免费计划可能会处理您的请求量。
创建一个免费的 Amazon AWS 帐户,您将在那里免费获得一年的最小实例,并在那里运行带有 nginx 代理的 ubuntu 服务器。
归档时间: |
|
查看次数: |
43072 次 |
最近记录: |