Python http请求中的名称解析
我正在尝试从一个dev服务器向公司内部的服务器发出一个简单的http请求。我发现,根据源/目标服务器的不同,我可能会被迫使用目标服务器的限定名称,比如Python http请求中的名称解析,python,dns,psycopg2,Python,Dns,Psycopg2,我正在尝试从一个dev服务器向公司内部的服务器发出一个简单的http请求。我发现,根据源/目标服务器的不同,我可能会被迫使用目标服务器的限定名称,比如srvdestinition.com.company.world,而不仅仅是srvdestinition 我同意,但我不明白我的DB连接是怎么工作的 假设我有srvorigin。现在,要发出http请求,我必须使用限定名srvdestinition.com.company.world。但是,对于数据库连接,具有非限定名称的连接字符串就足够了。psy
srvdestinition.com.company.world
,而不仅仅是srvdestinition
我同意,但我不明白我的DB连接是怎么工作的
假设我有
srvorigin
。现在,要发出http请求,我必须使用限定名srvdestinition.com.company.world
。但是,对于数据库连接,具有非限定名称的连接字符串就足够了。psycopg.connect(host='srvdestinition',…)
我知道协议是不同的,但是psycopg2
如何解析真名?首先,这一切都取决于操作系统的名称解析子系统是如何配置的。如果您在Unix上(您没有指定),则这由/etc/resolv.conf
管理。在这里,您可以向操作系统提供一个搜索列表:如果一个名称没有“足够”的点(该数字是可配置的),那么将添加一个后缀以重试解析
用于执行HTTP请求的库可能不会查询操作系统的名称解析,而是自行进行DNS解析。在这种情况下,它只能使用您提供的信息(但它也可以重复使用OS/etc/resolv.conf
和其中的信息),因此需要使用全名。
相反,psycopg2
可能使用操作系统解析机制,因此可以很好地处理“短”名称
这两个库都应该有关于如何处理主机名的文档。。。否则你需要研究他们的源代码。我猜psycopg2
是默认libpq
标准库的包装,如果我没有弄错的话,它是用C编写的,因此肯定使用标准操作系统解析过程
我可以理解这种差异带来的好奇,但无论如何,我的建议是在shell和等效程序上键入命令时保持短名称(即使这样也可能有问题),但在程序和配置文件中始终使用FQDNs(完全限定域名)。你会避免很多问题