对于PHP函数dns_get_record(),使用DNS_ANY
获取所有记录是否比单独调用类型产生更多或更少的http(或任何协议)请求?
// Is just 1 request? Or many requests (1 per each record type)?
dns_get_record('example.com', DNS_ANY);
VS
// 3 total requests?
dns_get_record('example.com', DNS_A);
dns_get_record('example.com', DNS_AAAA);
dns_get_record('example.com', DNS_MX);
基本上,我想尽可能减少网络请求,但我不知道dns_get_record()是如何工作的。
由于文档说DNS_ANY
并不总是返回所有记录,我想我可以尝试单独调用我想要的类型以获得更可预测的结果。但这样做会产生3个单独的请求,而不是DNS_ANY的一个请求。这是真的吗?
顺便说一句,如果任何类型为null,则DNS_ALL
或DNS_A + DNS_AAAA + DNS_MX
将返回false,因此我不能这样做。
答案 0 :(得分:1)
为每种类型单独获取信息是低效的,因为这将涉及多个请求,而将DNS_ANY参数与dns_get_record()一起使用,只需一个请求即可获取所有信息。 DNS_ANY是一个方便查询dns服务器信息的参数。使用此特定参数,您可能会获得相当多的信息。
如果您尝试在Linux命令行提示符下使用诸如“dig”之类的实用程序来获取gmail.com这样的域,您可以自己看看:
dig gmail.com ANY
输出如下:
`;; QUESTION SECTION:
;gmail.com. IN ANY
;; ANSWER SECTION:
gmail.com. 2386 IN MX 30 alt3.gmail-smtp-in.l.google.c om.
gmail.com. 2386 IN MX 40 alt4.gmail-smtp-in.l.google.c om.
gmail.com. 2386 IN MX 5 gmail-smtp-in.l.google.com.
gmail.com. 2386 IN MX 10 alt1.gmail-smtp-in.l.google.c om.
gmail.com. 2386 IN MX 20 alt2.gmail-smtp-in.l.google.c om.
gmail.com. 85186 IN SOA ns1.google.com. dns-admin.google .com. 2012061200 21600 3600 1209600 300
gmail.com. 81180 IN NS ns3.google.com.
gmail.com. 81180 IN NS ns4.google.com.
gmail.com. 81180 IN NS ns1.google.com.
gmail.com. 81180 IN NS ns2.google.com.
;; AUTHORITY SECTION:
gmail.com. 81180 IN NS ns2.google.com.
gmail.com. 81180 IN NS ns3.google.com.
gmail.com. 81180 IN NS ns4.google.com.
gmail.com. 81180 IN NS ns1.google.com.
;; ADDITIONAL SECTION:
ns1.google.com. 223708 IN A 216.239.32.10
ns2.google.com. 223708 IN A 216.239.34.10
ns3.google.com. 223708 IN A 216.239.36.10
ns4.google.com. 223708 IN A 216.239.38.10
;; Query time: 4 msec
[snip]
PHP的dns_get_record()表现得像dig实用程序,即它与dns服务器联系并执行查询。像“DNS_ANY”这样的参数是有利的,因为它可以同时获取所有内容。由于“挖掘”需要4毫秒,我认为dns_get_record()需要大约相同的时间或稍长一些。由于DNS_ANY参数可能产生的信息多于人们可能需要的信息,因此可以通过将DNS_MX与函数一起使用,将该查询限制为“MX”记录。
如果您对此函数的PHP内部源代码感到好奇,请查看here。内部源代码通常用C编程语言编写。
如果您想了解有关dns系统如何工作的更多信息,特别是在使用PHP时,请参阅我的文章for php | architect,题为“电子邮件验证”(2008年6月)。