fetch localhost不重定向到https?



在开发环境中,我不想通过使用https和SSL/STL认证来使事情变得复杂。

我学会了如何防止谷歌Chrome从重定向本地主机到https,并在Chrome地址栏输入http:/localhost:105/hello/后返回一个JSON对象。

令我困惑的是,以下内容在https页面的浏览器控制台(Inspect-> console)中不起作用:

const url = new URL('http://localhost:105/hello/');
fetch(url).then(response => response.json()).then(json => console.log(json))

错误显示为:

GET https://localhost:105/hello/net::ERR_SSL_PROTOCOL_ERROR
Uncaught (in promise) TypeError: Failed to fetch
at:1:1

在获取方法中添加参数{redirect: 'manual'}并没有帮助。

感谢@novavanity。它可以在url为http://localhost:105/hello/

的页面上工作我不知道为什么以及如何将http重定向到https?我怎样才能避免呢?

有时,由于307错误码(内部重定向),从HTTP重定向到HTTPS发生。你可以在Chrome开发者工具面板的"网络"选项卡中检查。

网络选项卡所在位置

所以,如果你以前有URL作为HTTPS,你可能想要清除Chrome上的缓存并重新启动应用程序。希望这有帮助。

当您在浏览器中使用fetch()时,如果当前页面通过HTTPS加载,则会自动使用HTTPS协议。这可能就是为什么你得到

的原因。

ERR_SSL_PROTOCOL_ERROR

使用fetch()访问http://localhost:105/hello/时出现错误。

为了防止fetch()使用HTTPS,您可以在传递给fetch()的Request对象中使用base选项:

const url = new URL('http://localhost:105/hello/');
const options = {
base: 'http://localhost:105/'
};
fetch(url, options).then(response => response.json()).then(json => console.log(json))

最新更新