我正在尝试从开发服务器向我公司内部的服务器发出一个简单的http请求。我发现,根据源/目标服务器的不同,我可能会或者不会强制使用目标服务器的限定名称,例如srvdestination.com.company.world
而不是srvdestination
。
我对此感到满意,但我不明白我的数据库连接是如何工作的?
我们说srvorigin
。现在,要发出http请求,我必须使用限定名称srvdestination.com.company.world
。但是,对于数据库连接,具有非限定名称的连接字符串足够psycopg.connect(host='srvdestination', ...)
我理解协议是不同的,但psycopg2
如何解析真实姓名?
答案 0 :(得分:0)
首先,这取决于如何配置操作系统的名称解析子系统。如果您使用的是Unix(未指定),则由/etc/resolv.conf
控制。在这里,您可以为操作系统提供搜索列表:如果名称没有“足够”的点(数字可配置),则会添加后缀以重试解析。
用于执行HTTP请求的库可能无法查询操作系统的名称解析并自行执行DNS解析。在这种情况下,它只能处理您提供的信息(但它也可以重用OS /etc/resolv.conf
及其中的信息),因此需要使用全名。
相反,psycopg2
可以使用操作系统解析机制,因此处理“短”名称就好了。
这两个库都应该有关于它们如何处理主机名的文档......否则你需要研究它们的源代码。我想psycopg2
是默认libpq
标准库的包装器,如果我没有弄错,用C语言编写,因此肯定会使用标准的OS解析过程。
我可以理解这种差异的好奇心,但无论如何我的建议是在shell上输入命令时保留短名称和等效(甚至可能存在问题),但始终使用FQDN(完全限定域名)在您的程序和配置文件中。你会避免很多问题。