python - http请求中的名称解析
问题描述
我正在尝试从开发服务器向我公司内部的服务器发送一个简单的 http 请求。我发现根据源/目标服务器,我可能会或不会被迫使用目标服务器的限定名称,srvdestination.com.company.world
而不是srvdestination
.
我对此很好,但我不明白我的数据库连接是如何工作的?
假设我有srvorigin
. 现在,要发出 http 请求,我必须使用限定名srvdestination.com.company.world
。但是,对于数据库连接,连接字符串不限定名称就足够了,psycopg.connect(host='srvdestination', ...)
我理解协议不同,但如何psycopg2
解析真实名称?
解决方案
首先,这一切都取决于您的操作系统的名称解析子系统是如何配置的。如果你在 Unix 上(你没有指定),这由/etc/resolv.conf
. 在这里,您可以为操作系统提供搜索列表:如果名称没有“足够”的点(数量是可配置的),则添加后缀以重试解析。
您用于执行 HTTP 请求的库可能不会向操作系统查询名称解析并自行执行其 DNS 解析。在这种情况下,它只能使用您提供的信息(但它也可以重用操作系统/etc/resolv.conf
和其中的信息),因此需要使用全名。相反,psycopg2
可以使用操作系统解析机制,因此处理“短”名称就可以了。
这两个库都应该有关于它们如何处理主机名的文档……否则你需要研究它们的源代码。我猜psycopg2
是默认libpq
标准库的包装器,如果我没记错的话,它是用 C 语言编写的,因此它肯定使用标准的操作系统解析过程。
我可以理解对这种差异的好奇,但无论如何我的建议是当您在 shell 和等效命令上键入命令时保留短名称(即使在那里也可能是一个问题),但始终在您的程序中使用 FQDN(完全合格的域名)和配置文件。你会避免很多问题。
推荐阅读
- css - 关键帧动画在 ipad Safari 和 chrome 中都很生涩。如何在 Safari 中平滑动画?
- networking - 如何在 homestead.yaml 中修复 ip homestead
- google-cloud-platform - 即使在 Google Cloud VM 中添加防火墙规则后端口也不会暴露
- jenkins - 如何使用 Jest 减少测试运行时间?
- windows - Qt Installer Framework 未注册文件类型
- flutter - 使用分页 Flutter 附加数据列表视图
- xml - 如果遇到子节点,XSLT 关闭 xml 中的节点
- html - 如何将容器流体中的内容与引导程序 4 上的容器对齐?
- python - 将pandas DataFrame中的元组旋转到特定的行元素
- azure - 使用 powershell 检查群集磁盘上的可用空间