您好,
我在浏览器中遇到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
答案 0 :(得分:0)
net::ERR_INSECURE_RESPONSE
通常表示SSL配置存在问题。确保您拥有有效的SSL证书,并且没有使用自签名证书。
答案 1 :(得分:0)
我今天意识到以下一段代码有问题。
{mode:"cors"}
不要使用它,它会混乱。
很抱歉这个混乱。
答案 2 :(得分:-1)
您可能正在使用https,但SSL证书出现了问题
首先按照以下说明操作: