为什么我的urllib2请求被Apache2延迟了?

时间:2011-09-29 16:14:04

标签: python apache iis urllib2

我正在处理两个内部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浏览器中看不到相同的行为。对于我正在犯的任何错误,我只是有一个解决方法。

1 个答案:

答案 0 :(得分:0)

查找正在进行,因为这就是Windows的功能。在其他任何事情之前总是要检查NetBIOS。

进一步阅读: