HTTPS请求,指定主机名和特定的IP地址
我的应用程序服务器有一个基于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的将设置servername
为Host
标题,除非它已经设置为别的东西(在这里)。
以上是 HTTPS请求,指定主机名和特定的IP地址 的全部内容, 来源链接: utcz.com/qa/427063.html