我有一个服务器向外部服务器 api.foreign.com/route 发送请求。问题是,当我在控制台中从浏览器发送请求时,我收到一个 cors allowed-origin 错误,它表示该错误来自 www.foreign.com/route 。网址不应更改,因为 www.foreign.com/route 上没有任何内容。这是我服务器上的 api:
app.use('/api/fetchData', createProxyMiddleware({
target: 'https://api.foreign.com',
changeOrigin: true,
followRedirects: false,
pathRewrite: (path, req) => {
const { data } = req.query;
return `/route?data=${data}`;
},
selfHandleResponse: true,
on: {
proxyRes: responseInterceptor(async (responseBuffer, proxyRes, req, res) => {
try {
console.log("requesting");
if (!responseBuffer || typeof responseBuffer !== 'object' || responseBuffer.length === 0) {
throw new Error('Invalid or empty response from target server');
}
const response = responseBuffer.toString('utf8');
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
return JSON.stringify({ id: response });
} catch (error) {
res.statusCode = 500;
return JSON.stringify({ error: 'Failed to process response from target server' });
}
}),
},
headers: {
Accept: "application/json",
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36",
}
}));
我尝试执行从 Postman 到 api.foreign.com 的请求,并收到包含所需数据的 200 响应。如何防止网址更改。
我在请求中添加了标头,以防止外部服务器出现 Cors 问题,但现在他们更改了服务器 url,这个问题开始发生。
要解决 CORS 错误,外部服务器应该允许您的源。当然,当您使用 Postman 测试 api 调用时,您收到了 200 响应,但 Postman 不在浏览器中运行,因此它不强制执行 CORS 策略,这就是您在 Postman 中收到 200 响应的原因。 CORS 策略仅针对域实施,因此一旦外部服务器允许您的来源,您就可以从外部服务器获取数据。希望对你有帮助。