当前位置: 首页 > 面试题库 >

HTTPS请求,指定主机名和特定的IP地址

陆寒
2023-03-14
问题内容

我的应用程序服务器有一个基于Node.js的部署脚本。部署过程中的第一步是在向DNS注册之前,验证这些应用服务器是否正确侦听HTTPS。为此,我只需要向该服务器的IP地址发出HTTPS请求即可。

如果这是HTTP,则不是问题。我可以向发出HTTP
GET请求http://[2001:0db8::0370:7334]/,这将起作用。但是,如果我发出HTTPS
GET请求https://[2001:0db8::0370:7334]/,则此操作将失败,因为证书用于特定的主机名,例如api.example.com

如果我是手动测试,则将IP地址临时放在hosts文件和cURL中https://api.example.com。但是,在此自动化过程中,我可能一次部署多个主机,因此这不是我的部署脚本的解决方案。

如何在指定主机名和IP地址的地方发出HTTPS请求?

也许有某种方法可以通过自定义代理进行操作?

我目前正在使用node-fetch,但是很高兴使用所需的任何API来完成这项工作。


问题答案:

设置host请求的标题:

const https = require('https');

https.get('https://AA.BB.CC.DD', {
  headers : { host : 'api.example.com' }
}, res => {
  console.log('okay');
}).on('error', e => {
  console.log('E', e.message);
});

编辑
:我挖了一下,看看这是如何工作的。为了允许基于HTTPS的虚拟主机,有一个称为SNI(服务器名称指示)的TLS扩展。客户端使用此扩展名指示其尝试连接的主机名,因此服务器可以选择属于该主机名的适当证书。

所使用的Node
tls模块,可以https选择servername设置此主机名:

https.get('https://AA.BB.CC.DD', {
  servername : api.example.com'
}, ...)

但是,您仍然还需要传递Host标头(这是常规HTTP协议的一部分):

https.get('https://AA.BB.CC.DD', {
  headers : { host : 'api.example.com' },
  servername : 'api.example.com'
}, ...)

为了保持干燥,Node.js的将设置servernameHost标题,除非它已经设置为别的东西(在这里)。



 类似资料:
  • 如何使用库存文件中的主机名和IP地址的值? 例如,我在文件中只有一个主机,名称为 FQDN,但这是在 DNS 服务器上注册的。 我尝试了一些变量,但总是得到主机名。但是,需要他们两个:( My test.yml file: 输出是:

  • 问题内容: 我有DNS服务器IP地址和主机名。 使用Java,如何使用该IP地址和主机名找到该DNS服务器返回的主机名的IP地址? 问题答案: 看看和方法。

  • 问题内容: 我对本机Ajax请求调用有一个奇怪的问题。 我正在创建Ajax对象并发送请求,如下所示: .... 当我使用类似的URL访问servlet时,则无法在客户端得到响应。但是我可以在服务器端看到响应。 与我调用请求的方式非常相似 我的网址是,那么我也无法在客户端看到响应。 我知道解决问题的最佳方法。 我可以用 那么我的本地主机或IP地址都没有问题。 但是我仍然认为为什么ajax请求中的本地

  • 问题内容: 我的主机文件(C:\ WINDOWS \ system32 \ drivers \ etc \ hosts)具有一堆IP地址到主机名的映射: 我正在尝试找到一种通过Java API以编程方式从IPAddress转换为HostName的方法。 伪代码: 问题答案: 我从这里尝试了代码,它可以工作。即:

  • 主机名到IP地址的解析接口 函数 struct hostent *  gethostbyname (const char *hostname)   获取主机地址   详细描述 主机名到IP地址的解析接口 函数说明 struct hostent* gethostbyname ( const char *  hostname ) 获取主机地址 参数 hostname 一个字符串指针,包含域名或主机名

  • 本文向大家介绍Java程序显示主机名和IP地址,包括了Java程序显示主机名和IP地址的使用技巧和注意事项,需要的朋友参考一下 要在Java中显示主机名和IP地址,代码如下 示例 输出结果 一个名为Demo的类包含主函数。在这个main函数中,定义了一个try和catch块。在try块中,创建了一个InetAddress实例,并使用getLocalHost函数获取InetAddress实例的主机地