Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 为什么相同域的重定向url会遇到CORS问题?_Node.js_Redirect_Cors_Fetch_Charles Proxy - Fatal编程技术网

Node.js 为什么相同域的重定向url会遇到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

情况有点复杂。我使用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的资源

获取代码为:

  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你能帮我回答另一个问题吗?这是一个跨源请求,因为请求URL
http://localhost:9963/api/list
的原点与浏览器认为是请求原点的空原点不同。跨源重定向请求时,浏览器会将请求的源设置为null。这种行为是Fetch规范所要求的。在这种情况下,浏览器会将原点标记为“受污染”。请参阅并感谢您的回答。对于跨源重定向导致的CORS问题,似乎没有很好的解决方案。然后我必须在模拟服务器中使用代理而不是重定向。@sideshowbarker你能帮我回答另一个问题吗
  const r_url = 'http://example.online.com/api/list';
  ctx.status = 307;
  ctx.redirect(r_url);