从主机名,有没有办法找到首选协议:HTTP或HTTPS?

时间:2016-11-08 15:29:41

标签: sockets https

我想连接到用户提供的某些“domain.com”主机。我没有像“http://domain.com”这样的完整网址。我不知道“domain.com”是否支持SSL(它可能只支持HTTP或仅支持HTTP或支持两者,然后首选HTTPS)。连接到https://domain.comhttp://domain.com是找出用于该主机的正确协议的唯一方法吗?

理想情况下,我想检查一下domain.com的一些DNS记录,它让我找到首选协议,而不是制作两个相当昂贵的网络连接,HTTP和HTTPS(其中一个,如果它试图连接到无效端口,可能需要一段时间才能超时)。

我无法直接控制“domain.com”主机,但如果需要,我可以建议其所有者添加DNS记录或其他任何内容。

在这一点上,一种特殊的编程语言并不重要,我只是对这个概念感到好奇。

2 个答案:

答案 0 :(得分:2)

我认为连接到实际站点可能是确定哪个端点规范为

的必要条件
  1. 只有在您连接网站并且
  2. 时才会知道网站是否已启动
  3. 连接后,您只知道任何重定向。
  4. 看看这两个Python项目 - benbalter/site-inspectordhs-ncats/pshtt。他们使用连接状态,HTTP响应代码和重定向的组合来确定给定域的规范端点。

答案 1 :(得分:2)

  

我想连接到用户提供的某些“domain.com”主机。我没有像“http://domain.com”这样的完整网址。我不知道“domain.com”是否支持SSL(它可能只支持HTTP或仅支持HTTP或支持两者,然后首选HTTPS)。连接到https://domain.comhttp://domain.com是找出用于该主机的正确协议的唯一方法吗?

通常,是的。或者至少是最简单的方法。

域名本身通常只能解析为IP地址。您不知道该IP地址实际运行的是什么。它可能有HTTP服务器,HTTPS服务器,FTP服务器,SMTP / POP服务器和IMAP服务器等。在您实际尝试使用所选协议连接到它之前,您只是不知道可用的内容。

因此,您必须尝试单独连接HTTP和HTTPS,无论哪个成功都是赢家。

  

理想情况下,我想检查一下domain.com的一些DNS记录,它让我找到首选协议,而不是制作两个相当昂贵的网络连接,HTTP和HTTPS

有一条标准的DNS SRV记录,可以用于提供有关HTTP / HTTPS服务器的存在及其运行的端口号的信息(此类用法)已涵盖Use of SRV records in conjuction with HTTP and URIs,已过期。

还有一个标准的DNS URI记录类型,它还可以提供服务名称和描述用于该服务的协议和端口的URI之间的映射。

但是,大多数管理员不使用SRV / URI记录来描述HTTP / S服务器(例如,Google和Yahoo不会),所以这必须是您要求的额外内容来自您的客户,而不是您可以依赖的用户可能会给您的所有域名。

  

和其中一个,如果它试图连接到无效端口,可能需要一段时间才能超时

您可以在传出连接上实现自己的超时,但不限于操作系统的默认超时。