我正在处理两个内部Web服务器,一个在Ubuntu Server 10.04上运行Apache2,另一个在Windows Server 2008上运行IIS。当我从具有清除缓存的Web浏览器中点击任一根URL时,调用服务器通过IP地址,两者都没有延迟。我也看到在任一服务器上浏览网站都没有延迟。但是,当我在Python中使用urllib2
调用相同的地址时,对Apache2服务器的每个请求都会延迟4.5到5秒。 IIS服务器响应时间小于0.02。
这是我运行以验证问题的脚本。我设置User-Agent以防它有所作为,但它似乎不是:
import urllib2
from time import time
apache_server = 'http://192.168.1.101/'
iis_server = 'http://192.168.1.102/'
headers = {'User-Agent' : "Mozilla/5.0 (X11; U; Linux i586; de; rv:5.0) Gecko/20100101 Firefox/5.0",}
print('Contacting Apache2 server...')
request = urllib2.Request(url=apache_server, headers=headers)
start = time()
response = urllib2.urlopen(request).read()
elapsed = time() - start
print('Elapsed time: {0}'.format(elapsed))
print('Contacting IIS server...')
request = urllib2.Request(url=iis_server, headers=headers)
start = time()
response = urllib2.urlopen(request).read()
elapsed = time() - start
print('Elapsed time: {0}'.format(elapsed))
结果:
>python urltest.py
Contacting Apache2 server...
Elapsed time: 4.55500006676
Contacting IIS server...
Elapsed time: 0.0159997940063
浏览器请求与解释此延迟的urllib2
请求之间有什么区别?
我已经看到由反向DNS查找引起的类似SSH问题,但我的Apache2配置中有HostnameLookups Off
。我不知道是否有其他任何东西可以触发查找。
更新:我跟踪了Wireshark的交换,发现三个失败的NBNS查询从我的机器到Apache2服务器,最后才开始说话。这占了失去的时间。我尝试在hosts
中为Web服务器添加一个条目,从而消除了延迟。
我不是将此作为答案添加,因为我仍然不知道为什么会发生查找尝试,或者为什么我从Web浏览器中看不到相同的行为。对于我正在犯的任何错误,我只是有一个解决方法。
答案 0 :(得分:0)
查找正在进行,因为这就是Windows的功能。在其他任何事情之前总是要检查NetBIOS。
进一步阅读: