Почему мои запросы от urllib2 задерживаются с помощью Apache2? - PullRequest
2 голосов
/ 29 сентября 2011

Я имею дело с двумя внутренними веб-серверами, один из которых работает на 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 для веб-сервера, что устранило задержку.

Я не добавляю это как ответ, потому что я все еще не знаю, почему происходит попытка поиска или почемуЯ не вижу такого же поведения в веб-браузере.У меня просто есть обходной путь для любой ошибки, которую я делаю.

1 Ответ

0 голосов
/ 29 сентября 2011

Поиск происходит, потому что это то, что делает Windows. Всегда будет проверять NetBIOS прежде всего.

Дополнительная литература:

...