Node.js 为什么相同域的重定向url会遇到CORS问题?
情况有点复杂。我使用http服务器在localhost:8080上托管我的本地代码。然后我使用Charles将一个在线URL(example.online.com/index.html)映射到我的本地URL(localhost:8080/index.html)以共享cookies。然后我在localhost:9963启动了一个本地节点服务器作为模拟服务器,模拟服务器已经实现了CORS设置。我向localhost:9963/api/list发出请求,在本地代码中使用Fetch api,因此使用cors的模拟数据响应该请求。有时,我不希望模拟服务器响应模拟数据。相反,模拟服务器使用307将请求(localhost:9963/api/list)重定向到在线api(example.online.com/api/list)。问题是,当浏览器执行重定向时,出现了CORS问题。我的困惑是,当重定向的url位于同一个域中时,为什么会发生CORS 错误为(源url替换为示例url): CORS策略已阻止从源“null”在“”处(从“”重定向)获取的访问:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“访问控制允许源”标头。如果不透明响应满足您的需要,请将请求的模式设置为“no cors”,以获取禁用cors的资源 获取代码为:Node.js 为什么相同域的重定向url会遇到CORS问题?,node.js,redirect,cors,fetch,charles-proxy,Node.js,Redirect,Cors,Fetch,Charles Proxy,情况有点复杂。我使用http服务器在localhost:8080上托管我的本地代码。然后我使用Charles将一个在线URL(example.online.com/index.html)映射到我的本地URL(localhost:8080/index.html)以共享cookies。然后我在localhost:9963启动了一个本地节点服务器作为模拟服务器,模拟服务器已经实现了CORS设置。我向localhost:9963/api/list发出请求,在本地代码中使用Fetch api,因此使用co
const url = `http://localhost:9963/api/list`;
const method = 'POST';
const headers = {
"Content-Type": `application/json`,
"Accept": `application/json`
};
const body = JSON.stringify(req);
const credentials = 'include';
const mode = 'cors';
return fetch(url, {
method,
headers,
body,
credentials,
mode
})
重定向代码是(使用koa2):
这是一个跨源请求,因为请求URL
http://localhost:9963/api/list
的原点与浏览器认为是请求原点的空原点不同。跨源重定向请求时,浏览器会将请求的源设置为null。这种行为是Fetch规范所要求的。在这种情况下,浏览器会将原点标记为“受污染”。请参阅并感谢您的回答。对于跨源重定向导致的CORS问题,似乎没有很好的解决方案。然后我必须在模拟服务器中使用代理而不是重定向。@sideshowbarker你能帮我回答另一个问题吗?这是一个跨源请求,因为请求URLhttp://localhost:9963/api/list
的原点与浏览器认为是请求原点的空原点不同。跨源重定向请求时,浏览器会将请求的源设置为null。这种行为是Fetch规范所要求的。在这种情况下,浏览器会将原点标记为“受污染”。请参阅并感谢您的回答。对于跨源重定向导致的CORS问题,似乎没有很好的解决方案。然后我必须在模拟服务器中使用代理而不是重定向。@sideshowbarker你能帮我回答另一个问题吗
const r_url = 'http://example.online.com/api/list';
ctx.status = 307;
ctx.redirect(r_url);