【问题标题】:How to intercept all http request and change url to https如何拦截所有http请求并将url更改为https
【发布时间】:2019-12-26 15:13:42
【问题描述】:

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

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

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

【问题讨论】:

  • 这通常由您的虚拟主机上的转发处理。
  • 如果您无法访问那些请求其他库的 JavaScript 库,我不相信您能够这样做。但是,如果您的网站托管在 Web 服务器(即 IIS)中,那么您可以使用 url 重写模块来实现这一点,但这不会成为您前端的一部分。

标签: javascript http https interceptor


【解决方案1】:

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

查看此link 以更好地了解该问题以及如何预防。

【讨论】:

    【解决方案2】:

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

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

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-25
      • 2020-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多