2012-02-12 12 views
6

El código de ejemplo para un servidor web básico determinado por http://twistedmatrix.com/trac/ parece incrementar el contador de la solicitud de dos de cada solicitud, en lugar de 1.La aplicación web impulsada por pitón de ejemplo de ejemplo incrementa el recuento de solicitudes por 2, ¿por qué?

El código:

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() 

Mirando el código, Parece que debería ser capaz de conectarse a la URL http://localhost:8080 y ver:

I am request #1 

continuación, actualice la página y ver:

I am request #2 

Sin embargo, veo:

I am request #3 

Cuando restauro de nuevo, ver:

Así que, a juzgar por el contador, el servidor parece llamar a la "render_GET" función dos veces para cada solicitud Estoy ejecutando esto en Windows 7 usando Python 2.7. ¿Alguna idea de lo que podría estar pasando o es este comportamiento esperado?

Actualización: El código funciona a la perfección, es el navegador el que está siendo truculento. Cada actualización de página, el navegador envía una solicitud GET para "/" y "/favicon.ico", que representa el incremento en 2, porque la función render_GET en realidad se está llamando dos veces por actualización de página.

+0

¿Este comportamiento es consistente o cambian los números cada vez que lo intentas? Intente mantener presionada la tecla F5 en su navegador para actualizar rápidamente, luego verifique si los números de solicitud son siempre impares, o si parece omitir los números aleatoriamente. –

Respuesta

7

Los navegadores pueden comportarse de manera sorprendente. Si intenta imprimir la solicitud completa, puede encontrar que está solicitando "/" y también "favicon.ico", por ejemplo.

+0

Eso ciertamente explica el hecho de que hay dos solicitudes HTTP por "actualización" en el navegador, pero no debería causar la impresión solo de números de solicitud impares. –

+0

@ AndréCaron: ¿Por qué no? Si siempre solicita el favicon después del contenido de la página, se muestra como (1) página, icono (2), icono (3), (4), etc. Todos los números de página serán extraños. – icktoofay

+0

AFAICT, 'render_GET' es llamado para todas las solicitudes HTTP usando el método GET, ya sea que la URL sea'/'o'/favicon.ico'. A menos que me esté perdiendo algo? –

2

El navegador podría estar haciendo una segunda solicitud para el favicon.ico.

Debería hacer que su servidor imprima la ubicación de la solicitud cuando reciba una solicitud. Esto te diría si esto es correcto.

+0

Eso ciertamente explica el hecho de que hay dos solicitudes HTTP por "actualización" en el navegador, pero no debería causar la impresión de solo números de solicitud impares. –

Cuestiones relacionadas