首页 > 解决方案 > http请求中的名称解析

问题描述

我正在尝试从开发服务器向我公司内部的服务器发送一个简单的 http 请求。我发现根据源/目标服务器,我可能会或不会被迫使用目标服务器的限定名称,srvdestination.com.company.world而不是srvdestination.

我对此很好,但我不明白我的数据库连接是如何工作的?

假设我有srvorigin. 现在,要发出 http 请求,我必须使用限定名srvdestination.com.company.world。但是,对于数据库连接,连接字符串不限定名称就足够了,psycopg.connect(host='srvdestination', ...)我理解协议不同,但如何psycopg2解析真实名称?

标签: pythondnspsycopg2

解决方案


首先,这一切都取决于您的操作系统的名称解析子系统是如何配置的。如果你在 Unix 上(你没有指定),这由/etc/resolv.conf. 在这里,您可以为操作系统提供搜索列表:如果名称没有“足够”的点(数量是可配置的),则添加后缀以重试解析。

您用于执行 HTTP 请求的库可能不会向操作系统查询名称解析并自行执行其 DNS 解析。在这种情况下,它只能使用您提供的信息(但它也可以重用操作系统/etc/resolv.conf和其中的信息),因此需要使用全名。相反,psycopg2可以使用操作系统解析机制,因此处理“短”名称就可以了。

这两个库都应该有关于它们如何处理主机名的文档……否则你需要研究它们的源代码。我猜psycopg2是默认libpq标准库的包装器,如果我没记错的话,它是用 C 语言编写的,因此它肯定使用标准的操作系统解析过程。

我可以理解对这种差异的好奇,但无论如何我的建议是当您在 shell 和等效命令上键入命令时保留短名称(即使在那里也可能是一个问题),但始终在您的程序中使用 FQDN(完全合格的域名)和配置文件。你会避免很多问题。


推荐阅读