пример веб-приложения, управляемого событиями на Python, увеличивает количество запросов на 2, почему? - PullRequest
6 голосов
/ 13 февраля 2012

Пример кода для базового веб-сервера, заданный http://twistedmatrix.com/trac/, похоже, увеличивает счетчик запросов на два для каждого запроса, а не на 1.

Код:

from twisted.web import server, resource
from twisted.internet import reactor

class HelloResource(resource.Resource):
    isLeaf = True
    numberRequests = 0

    def render_GET(self, request):
        self.numberRequests += 1
        request.setHeader("content-type", "text/plain")
        return "I am request #" + str(self.numberRequests) + "\n"

reactor.listenTCP(8080, server.Site(HelloResource()))
reactor.run()

Глядя на код, похоже, что вы должны иметь возможность подключиться к URL http://localhost:8080 и увидеть:

I am request #1

Затем обновите страницу и увидите:

I am request #2

Однако я вижу:

I am request #3

Когда я снова обновляюсь, я вижу:

I am request #5

Итак, судя по счетчику, сервер, по-видимому, вызывает функцию"render_GET" дважды для каждого запроса.Я запускаю это на Windows 7, используя Python 2.7.Любая идея, что может происходить или это ожидаемое поведение?

Обновление: код работает отлично, это хитрый браузер.При каждом обновлении страницы браузер отправляет GET-запрос для «/» и «/favicon.ico», который учитывает увеличение на 2, поскольку функция render_GET фактически вызывается дважды за обновление страницы.

Ответы [ 2 ]

7 голосов
/ 13 февраля 2012

Браузеры могут вести себя удивительным образом.Если вы попытаетесь распечатать полный запрос, вы можете обнаружить, что он запрашивает «/», а также «favicon.ico», например.

2 голосов
/ 13 февраля 2012

Браузер может сделать второй запрос на favicon.ico.

При получении запроса ваш сервер должен распечатать местоположение запроса.Это скажет вам, если это правильно.

...