这可能是一个复制品,但我还没有找到一个专门与我的问题有关的帖子。
我正在进行以下API调用:
const config = {
headers: {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET,PUT,POST,DELETE,PATCH,OPTIONS"
}
};
const {
data: { ip }
} = await axios.get("https://api.ipify.org?format=json", config);
这会抛出一个错误:
Access to XMLHttpRequest at 'https://api.ipify.org/?format=json' from origin 'http://localhost:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
当我将我的应用程序部署到Heroku时,API调用按预期工作。然而,当在我的本地机器上进行开发时,它不起作用。不知道我错过了什么。
9条答案
按热度按时间6ie5vjzr1#
如果您正在NodeJS中构建您的REST API。遵循以下简单的步骤
停止Node.js服务器。
将以下代码行添加到server.js或index.js
现在,尝试在客户端进行API调用,它应该可以工作
628mspwn2#
过了很多天,我终于找到了解决办法。不是像这样简单地使用CORS
const cors = require('cors');
app.use(cors());
在您的服务器中,使用CORS选项的index.js将解决该问题,现在您可以传递Cookie或其他凭据
dfddblmv3#
如果服务器没有CORS策略来允许来自您的域的请求,则您不能真正从具有不同主机名的服务器获取数据。
简而言之,除非允许,否则
localhost
不能调用ipify.org
。它似乎不是,我假设服务器不是由您管理的。所以你唯一的选择就是使用反向代理。您可以读取how to create an http proxy with node here。您需要的是让您的应用程序在伪/存根主机上运行,而不是在本地主机上运行:
local.development.ipify.org
->localhost:3000
的代理这样,当您进行API调用时,您与
ipify.org
在同一个域中,不会出现任何CORS问题。7hiiyaii4#
This article很快解决了我的问题。
您可以进行的最快修复是安装moesif CORS extension。安装后,在浏览器中单击它即可激活该扩展。确保图标的标签从“关”变为“开”
bvjveswy5#
首先,在后端应用程序(如Express应用程序)中,您必须启用cors
喜欢:
1.安装运行命令
npm i cors
的CORS1.然后转到server.js或app.js或index.js文件并添加
var cors = require('cors');
app.use(cors())
3.CORS将使您的客户端或前端应用程序能够访问您的后端路线。最后,转到您的路径,并在Get Routing中粘贴以下行
router.get("/", (req, res) => {
res.setHeader("Access-Control-Allow-Origin", "*")
res.setHeader("Access-Control-Allow-Credentials", "true");
res.setHeader("Access-Control-Max-Age", "1800");
res.setHeader("Access-Control-Allow-Headers", "content-type");
res.setHeader( "Access-Control-Allow-Methods", "PUT, POST, GET, DELETE, PATCH, OPTIONS" );
});
面对这个问题,我也忍受了2个小时,我就这样解决了我的问题。所以希望这能对你有所帮助
xghobddn6#
转到您的Package.json文件并添加:“Proxy”:“Your-api-url”,但仅添加开头/基,例如,如果您使用的是Pokemon API,则只需设置“Proxy”:“https://pokeapi.co/api/v2”,并且在您的服务文件中,您可以使用带有所需路径的axios:
nhn9ugyo7#
您似乎要尝试做的是告诉服务器它应该使用您在Axios调用中指定的CORS策略。这根本不是事情的工作方式-服务器定义了它自己的CORS策略,而您必须简单地遵守它们。如果您尝试访问的服务器在其CORS策略中不支持
http://localhost:3000
,则不能将该源与API一起使用。如果服务器是您的,请查看cors包并将其配置为允许
localhost:3000
作为源。如果您不拥有服务器,则在不询问服务器所有者是否愿意这样做的情况下,您无法真正更改任何CORS策略。wgmfuz8q8#
这可能是由于处于
development
模式的Reaction应用程序发出了POST
请求。在开发模式下,您可以通过在‘文件中添加以下代码行来绕过CORS策略。x8goxv8g9#
我只在Crome浏览器上遇到了这个问题,而在Crome浏览器上,我有多次登录扩展。当我删除此扩展时,此问题已修复。