获取:我在DevTools中看到了响应但是Fetch仍然为GET提供了“Access-Control-Allow-Origin”问题

问题描述 投票:0回答:1

所以我有一个关于fetchAccess-Control-Allow-Origin的问题。

我尝试获取这样的网站:

fetch('https://localhost/.../api/json')
    .then(blob => blob.json())
    .then(data => console.log("data:", data))
    .catch(err => console.log("err: ", err));

因此,在Chrome网络标签中,我看到显然没有问题。但是,在JavaScript代码中,我得到了CORS问题。这怎么可能呢?看到:

enter image description here

我尝试添加mode: 'cors'它没有帮助。我尝试添加mode: 'no-cors'是的,它通过但我无法阅读答案在这种情况下,我得到Unexpected end of input'blob'变量是空的无论如何。

如果我使用PostmanCurl执行相同的GET请求而没有任何选项或标题,它就像魅力一样,我得到了我的回复。

你有什么主意吗?提前致谢

编辑:因为它正在处理PostmannCurl,并且因为我可以在Chrome调试器中看到响应,所以我认为它不是另一个问题的副本,其中请求明确地转到不允许的外部URL从其他地方访问。对?

编辑2:它可能必须这样做地址:https://localhost是自签名的,因此没有有效的证书?在curl我不得不添加--insecure标志。

javascript get cors fetch
1个回答
0
投票

正如T.J.所指出的那样。克劳德,这在浏览器中是不可能的。查看相关资源:

但是,不要绝望!有一个解决方法:

cURL Server Workaround:

我们将使用调用cURL的节点服务器来绕过限制:

你需要npm的nodejs。

  • npm initnpm i -S express
  • 添加一个api.js文件。使用以下代码:
    const https = require("https");
    const express = require('express');

    const app = express();

    app.use(function(req, res, next) {
        res.header("Access-Control-Allow-Origin", "*");
        res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
        next();
    });

    app.get('/', function (req, res) {
        const exec = require('child_process').exec;

        exec('curl ' + req.query.url + ' --insecure', function (error, stdout, stderr) {
          console.log('stdout: ' + stdout);
          console.log('stderr: ' + stderr);

          res.json(stdout);

          if (error !== null) {
            console.log('exec error: ' + error);
          }
        });
    });

    app.listen(3000, function () { console.log('listening on port 3000!'); });
  • 通过node api.js运行服务器
  • 现在,在您的代码中,您可以向localhost:3000发出请求,在查询参数中添加您想要生成get请求的URL。例:
    fetch('http://localhost:3000/?url=https://HOST/.../api/json')
      .then(blob => blob.json())
      .then(data => console.log("data:", data))
      .catch(err => console.log("err: ", err));
  • 请求现在按预期工作。请享用。
© www.soinside.com 2019 - 2024. All rights reserved.