如何拦截所有HTTP请求并将URL更改为https

时间:2019-12-26 15:13:42

标签: javascript http https interceptor

我的代码中有一些第三方JavaScript文件,其中包括一些在事件后加载的其他JavaScript文件。我没有控制权来更改第三方JavaScript文件中的代码。

我的网站托管在https上,并且包含的​​文件正在通过http加载,因为浏览器不允许加载并显示“混合内容已阻止”。

我可以编写拦截器来拦截此调用并将http更改为https。

2 个答案:

答案 0 :(得分:0)

在代码中包含第三方库时,加载的浏览器将向托管代码的服务器发出请求。您可以下载代码(如果可用),并且没有法律问题,然后将其托管在您的服务器上。您必须了解,并非所有数据都需要通过https(例如,以提高性能)。

看看这个link可以更好地了解该问题以及如何预防该问题。

答案 1 :(得分:0)

感谢您的评论,但我不认为我应该更改第三方库,因为它可能存在一些法律问题。

但是我发现可以通过拦截所有http调用并通过在全局JavaScript中添加以下代码来将其转发到https的方式来解决我的问题。

Object.defineProperty(HTMLScriptElement.prototype, 'src', {
    get: function() {
         return this.getAttribute('src')
    },
    set: function(url) {
        var prefix = "http://";

        if (url.startsWith(prefix))
            url = "https://" + url.substr(prefix.length);

        console.log('being set: ' + url);
        this.setAttribute('src', url);
    }
});

最初在这里发布:Force JavaScript to load additional resources over https