Python 为什么我的urllib2请求因Apache2而延迟?

Python 为什么我的urllib2请求因Apache2而延迟?,python,apache,iis,urllib2,Python,Apache,Iis,Urllib2,我正在处理两个内部web服务器,一个在Ubuntu服务器10.04上运行Apache2,另一个在Windows Server 2008上运行IIS。当我在清除缓存的web浏览器中点击其中一个根URL时,通过IP地址调用服务器,这两个URL都会立即弹出。我也没有看到任何一台服务器上的网站浏览延迟。但是,当我在Python中使用urllib2调用相同的地址时,对Apache2服务器的每个请求都会延迟4.5到5秒。IIS服务器的响应时间小于0.02秒 下面是我运行的一个脚本,用于验证问题。我设置了用户

我正在处理两个内部web服务器,一个在Ubuntu服务器10.04上运行Apache2,另一个在Windows Server 2008上运行IIS。当我在清除缓存的web浏览器中点击其中一个根URL时,通过IP地址调用服务器,这两个URL都会立即弹出。我也没有看到任何一台服务器上的网站浏览延迟。但是,当我在Python中使用
urllib2
调用相同的地址时,对Apache2服务器的每个请求都会延迟4.5到5秒。IIS服务器的响应时间小于0.02秒

下面是我运行的一个脚本,用于验证问题。我设置了用户代理,以防它有所不同,但它似乎没有:

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
请求之间有什么区别,可以解释这种延迟?

我见过SSH因反向DNS查找而导致的类似问题,但我在Apache2配置中禁用了
HostnameLookups
。我不知道是否还有其他东西会触发查找


更新:我跟踪了与Wireshark的交换,发现三个失败的NBN查询从我的机器传输到Apache2服务器,最后才开始对话。这就解释了损失的时间。我尝试在
hosts
中为web服务器添加一个条目,这消除了延迟


我没有将此添加为答案,因为我仍然不知道为什么会发生查找尝试,或者为什么在web浏览器中看不到相同的行为。无论我犯了什么错误,我都有一个解决办法。

查找正在进行,因为Windows就是这样做的。它总是先检查NetBIOS,然后再做其他事情

进一步阅读:


    • 查找正在进行,因为Windows就是这样做的。它总是先检查NetBIOS,然后再做其他事情

      进一步阅读:


      我从一开始就提供了一个IP地址,因此没有要解析的名称。我的
      urllib2
      请求是否有什么特殊之处会触发反向查找,而浏览器请求则直接通过?我从一开始就提供了一个IP地址,因此没有名称可解析。我的
      urllib2
      请求是否有什么特别之处,当浏览器请求直接通过时会触发反向查找?