CORS在浏览器中不使用Fetch API

时间:2016-12-14 03:21:20

标签: javascript node.js express cors fetch-api

您好,

我在浏览器中遇到CORS和Fetch API的问题。

我正在运行使用Express localhost:5000编写的NodeJS服务器,该服务器接受对GET的{​​{1}}请求。此服务器用于使用我的REST API为客户端提供服务。

在我的服务器代码中,我使用节点模块/get_a版本2.8.1来启用带有Express的CORS。实现涉及在我的应用程序中将模块功能应用为中间件。

我可以使用Insomnia REST API client向网址发送HTTP GET请求。服务器响应应该正确返回的JSON数据。

但是,当我在浏览器中使用Fetch API尝试从服务器获取相同的资源时,控制台返回响应cors我怀疑这与我的CORS配置或其他内容有关行,因为我的代码似乎没有其他问题。

我在Firefox 46.0.1和Google Chrome 55.0中尝试并测试了以下代码,两个浏览器都告诉我请求失败,消息类似于TypeError: NetworkError when attempting to fetch resource.。但是,Chrome也说了这一行:Access-Control-Allow-Origin header not set

我已经做了几个小时的研究,但Stack Exchange上的帖子都没有处理Fetch API以及它在浏览器中不起作用的原因。为此,我感到困惑 - 它在REST API测试程序中运行良好并使用Linux GET命令,那么为什么它不适用于浏览器中的Fetch API?

非常感谢帮助,谢谢。

以下是我的代码:

服务器代码:

GET https://www.examplesite.com net::ERR_INSECURE_RESPONSE

浏览器代码

...

var srv = express();
srv.use(cors());

srv.get("/get_a", function(req,res){
    res.json({"test":"hello"});
});

srv.listen(5000);

请求标题

fetch(
    "http://127.0.0.1:5000/get_a",
    {
        mode : "cors"
    }
).
    then(function(r) {
        return r;
    })
    .then(function(r){
        console.log(r.json());
        return r;
    })
    .catch(function(e){
        console.log("error --> " + e);
        return e;
    })
    ;

响应标头(来自REST API测试人员)

GET /get_a HTTP/1.1
Host: 127.0.0.1:5000/
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:46.0) Gecko/20100101 Firefox/46.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
DNT: 1
origin: null
Connection: keep-alive
Cache-Control: max-age=0

3 个答案:

答案 0 :(得分:0)

net::ERR_INSECURE_RESPONSE通常表示SSL配置存在问题。确保您拥有有效的SSL证书,并且没有使用自签名证书。

答案 1 :(得分:0)

我今天意识到以下一段代码有问题。

{mode:"cors"}

不要使用它,它会混乱。

很抱歉这个混乱。

答案 2 :(得分:-1)

您可能正在使用https,但SSL证书出现了问题

首先按照以下说明操作:

http://www.i-visionblog.com/2014/10/create-https-tls-ssl-application-with-express-nodejs-in-localhost-openssl.html