Я имею дело с двумя внутренними веб-серверами, один из которых работает на Apache2 на Ubuntu Server 10.04, а другой - на IIS в Windows Server 2008. Когда я ударил любой из корневых URL-адресов из веб-браузера с очищенным кешем, вызывая серверпо IP-адресу, оба всплывают без задержки.Я также не вижу задержек с просмотром сайтов ни на одном сервере.Однако, когда я вызываю те же адреса, используя urllib2
в Python, каждый запрос к серверу 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
запрос, который объяснил бы эту задержку?
Я видел похожие проблемы с SSH, вызванные обратным поиском DNS, но у меня HostnameLookups Off
в моей конфигурации Apache2.Я не знаю, может ли что-то еще вызывать поиск.
Обновление: Я проследил за обменом с Wireshark и обнаружил три сбойных запроса NBNS, идущих от моей машины кСервер Apache2, прежде чем они наконец начинают говорить.Это объясняло потерянное время.Я попытался добавить запись в hosts
для веб-сервера, что устранило задержку.
Я не добавляю это как ответ, потому что я все еще не знаю, почему происходит попытка поиска или почемуЯ не вижу такого же поведения в веб-браузере.У меня просто есть обходной путь для любой ошибки, которую я делаю.