JavaScript的fetch自动将http改为https

14

我使用以下代码在客户端使用fetch发送请求:

    var request = new Request(`http://ip:8080/click?url=${value}`, {
        method: 'GET',
        headers: new Headers({
            "Content-Type": "application/json"
        }),
    });
    fetch(request)

但是当浏览器发起请求时,它会自动将URL更改为https协议:

https://ip:8080/click?url=${value}

注意:网页具有SSL加密

随后,在网页控制台上我得到了这个错误:无法加载资源:net :: ERR_CONNECTION_CLOSED


服务器不支持https请求,当我在本地浏览器上测试网页时没有任何问题,但是在使用SSL加密的网页上进行测试时就会出现错误。 - ctb
什么?!你在评论中写道服务器“不支持https”,而在你的帖子中却说“网页有SSL加密”?! - Marc
是的,网页托管具有SSL加密。API所在的服务器不支持https请求。 - ctb
我认为你的问题是CORS:https://en.wikipedia.org/wiki/Cross-origin_resource_sharing - Marc
@Marc,既然从HTTP到HTTPS的更改是由浏览器完成的,那么它怎么可能是CORS问题呢? - Karol Borkowski
@KarolBorkowski 这取决于情况。如果请求来自相同的域名/主机,则不会出现跨域问题。如果请求的来源是“localhost”或者是由op控制的Web服务器,则可能会出现跨域问题。但由于op没有回答,也没有发布请求/响应头,我们永远不会知道。我们甚至不知道这是客户端还是服务器端的问题。因此,我们只能猜测可能导致问题的原因... - Marc
1个回答

9

我有同样的问题,原因是在头部区域中有以下行:

<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">

它将所有的http请求替换为https。

请注意,这也可以来自页面响应的HTTP标头。 - Kaiido
这是我的模板问题。我认为当人们看到不可预测的行为时,应该检查这个问题。 - rkrishnasanka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接