gpt4 book ai didi

javascript - 从 https 发送请求到本地 http(s) 服务器

转载 作者:太空宇宙 更新时间:2023-11-03 13:23:01 33 4
gpt4 key购买 nike

我试着解释我们的问题。

我们正在编写一个小工具(使用 Java 1.8 和 Jetty+Jersey),它提供了一个用于在硬盘上保存数据(文档,...)或直接打印文档的休息服务器。

可以在本地计算机 (localhost) 或本地网络中的不同设备上启动/访问该工具。

问题是如果 https 页面未经过 ssl 加密,则您无法将请求发送到本地工具。

我们需要的是我们工具的 ssl 证书。

但问题是我们无法知道我们的客户希望在哪个设备/IP 地址上运行该工具,而您必须将域绑定(bind)到 ssl 证书。

我们可以创建 ssl 证书并将其与(例如)tool.domain.com 绑定(bind),但该工具可以在 127.0.0.1 以及 192.168.10.2 或类似的东西上运行。

所以我的问题是,有没有办法(以编程方式)“绕过”这堵墙?

一种“方式”是在本地主机文件中添加一个条目,但我们希望为我们的客户做的工作尽可能少,并且您不能在非 root 移动设备上设置主机条目。

编辑:添加了一些代码片段。

        ServletContextHandler context = new ServletContextHandler(server, "/*");

// vhosts
// context.setContextPath("/*");
context.setVirtualHosts(new String[]{
"127.0.0.1",
"192.168.6.195",
"localhost",
"tool.domain.com"
});

我们将虚拟主机添加到 jetty 服务器。我们的域有一个自签名证书(用于测试)。

我们想归档这样的东西:

enter image description here

这里有一些用于测试/可视化的 JS 代码:

var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://127.0.0.1:7331/test/echo/test1111');
xhr.setRequestHeader('Host', 'https://tool.domain.com');
xhr.send();

但是 Chrome(我认为还有其他浏览器)阻止了 Host-Header

最佳答案

如果您有自己的公司,并且有自己的公司域名,那么这是可能的。

假设您有 dominice-so.com

如果您为诸如 self.dominice-so.com 之类的东西创建了一个 dns 条目以始终返回 127.0.0.1 那么您可以使用有效的 keystore /信任库您产品中的域名 self.dominice-so.com 的证书。

浏览器应该能够很好地连接,使用诸如...

var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://self.dominice-so.com:7331/test/echo/test1111');
xhr.setRequestHeader('Host', 'https://tool.domain.com');
xhr.send();

由您来保护该 keystore /信任库密码,以免它落入不法分子之手。 (这超出了这个问题的范围)

关于javascript - 从 https 发送请求到本地 http(s) 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43321200/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com