2010-12-16 10 views
33

Google Chrome envía varias solicitudes para recuperar una página, y eso es, aparentemente, no un error, sino una función. Y nosotros como desarrolladores solo tenemos que lidiar con eso.¿Qué hacer con cromo enviando solicitudes adicionales?

Por lo que pude extraer en cinco minutos, Chrome lo hace solo para que la navegación sea más rápida, por lo que si se pierde una conexión, la segunda se hará cargo.

Supongo que si el sitio web está bien desarrollado, entonces su funcionalidad no se romperá por esto, porque las solicitudes múltiples simplemente no son nuevas.

Pero no estoy seguro de haber explicado todas las situaciones que esta característica puede producir.

¿Habría alguna situación especial? ¿Alguna de las mejores prácticas para lidiar con ellos?

Actualización 1: Ahora veo por qué la página de mi banco arroja un error cuando abro la página con chrome! Dice: "Solo una ventana del navegador debe estar abierta". Esa es su solución a las amenazas de seguridad? !!

+2

¿Tiene un enlace a algún lugar donde esto esté oficialmente documentado? – fearofawhackplanet

+0

Lo obtuve de una pregunta en stackoverflow: "Chrome está probando algunas tácticas agresivas en sus compilaciones de desarrolladores (creo que es genial). Lo que están haciendo es abrir especulativamente sockets a los servidores, y también abrir un segundo socket si su primer intento no obtiene una respuesta lo suficientemente rápido. Es bastante fácil ver cómo un error en esta materia, o incluso el comportamiento esperado, podría desencadenar filtros de abuso. Pero, como dije, creo que vale la pena hacerlo. Todos estos las startups web ganarán más dinero si la Web es más rápida ". –

+0

Un problema de Chromium toca en este http://code.google.com/p/chromium/issues/detail?id=39402#c11 – jrummell

Respuesta

13

Su mejor opción es seguir las mejores prácticas de desarrollo web estándar: no cambie el estado de la aplicación como resultado de una llamada GET.

Si está preocupado, le recomiendo que actualice sus pruebas de la capa de datos para que las llamadas GET se dupliquen &, asegúrese de que devuelvan los mismos datos.

(que no estoy viendo este comportamiento con Chrome 8.0.552.224, por cierto, es muy nuevo?)

+0

Estoy usando la misma versión, pero veo el comportamiento. Intente llamar a un script que incremente un número en un archivo. –

+0

No he logrado reproducirlo, escribí un guión rápido que se agrega a un archivo y solo obtengo una línea en el archivo por clic. Estoy usando la compilación de Linux, por lo que quizás aún no esté habilitada. – Peter

+0

No siempre se puede cambiar el estado de la aplicación desde un GET. ¿Qué sucede si el usuario ha seleccionado "Iniciar sesión automáticamente", por lo que analizamos la cookie, determinamos que pueden iniciar sesión automáticamente y luego actualizamos la hora del atributo "último inicio de sesión" en el objeto Usuario. Ese es un cambio de estado de la aplicación. – Volksman

1

yo sólo han implementado un solo uso Guid token (asp.net/TSQL) que es generado cuando se genera la primera forma en una serie de dos (+ página de confirmación). El token se registra como "pendiente" en el DB cuando se genera. El token Guid acompaña las publicaciones como un campo oculto, y finalmente se marca como cerrado cuando se completa la operación del usuario (pago). Este mecanismo funciona y evita que cualquiera de los formularios se vuelva a enviar después de que se realice el pago. Sin embargo, veo 2 o 3 (!?) Tokens adicionales generados por solicitudes adicionales rápidamente uno después del otro. La primera solicitud es lo que termina en frente del usuario (localhost - es decir, yo), donde el contenido generado termina por las otras dos solicitudes que no tengo idea. Inicialmente me pregunté por qué los controladores de Page_Load disparaban varias veces para una impresión de una página, así que probé una bandera en Http.Context.Current, pero me di cuenta de que las solicitudes posteriores entraban en la misma URL pero sin datos de publicación, y Vaciar Http.Context.Corrent arrays - es decir, completamente (para fines prácticos) solicitudes HTTP separadas. ¿Cómo manejar esto? ¿Algún tipo de token y lógica para rechazar solicitudes posteriores de contenido del cuerpo de la página mientras el primero aún está en proceso? ¿Supongo que esto podría tener lugar como un contexto global?

2

Esto solo ocurre cuando habilito la extensión "webug" (que es un reemplazo de FirePHP para Chrome). Si deshabilito la extensión, el servidor solo obtiene una solicitud.

+1

Pido disculpas por este error en Webug: en la versión actual está corregido. – fedosov

1

Estaba teniendo este problema, pero ninguna de las soluciones aquí era el problema. Para mí, fue causado por la extensión APNG en Chrome (soporte para PNG animados). Una vez que deshabilité esa extensión, ya no vi solicitudes dobles de imágenes en el navegador. Debo señalar que, independientemente de si la página estaba produciendo una imagen PNG, la desactivación de esta extensión solucionó el problema (es decir, APNG parece causar el problema para las imágenes independientemente del tipo de imagen, no tienen que ser PNG).

También tenía muchas otras extensiones (como "Desarrollador web" que muchos han sugerido que es el problema), y ese no era el problema. Deshabilitarlos no solucionó el problema. También estoy ejecutando en modo desarrollador y eso no hizo una diferencia para mí en absoluto.

13

Vi el comportamiento sometido al escribir mi aplicación de servidor y encontré que las respuestas anteriores probablemente no sean ciertas.

Chrome distribuye una única solicitud en múltiples http para buscar recursos en paralelo. En este caso, es una imagen que obtiene como un http get separado.

He adjuntado la captura de pantalla de la captura de paquetes a través de wireshark.

Es para una solicitud de obtención simple al puerto 8080 para el cual mi servidor devuelve un mensaje de saludo.

Chrome envía la segunda solicitud de obtención de obteniendo el icono favorito que se ve en la parte superior de cada pestaña abierta. NO es un segundo momento para atender el tiempo de espera ni nada por el estilo.

Se debe considerar otro elemento que difiere entre navegadores.

Aquí es una pregunta de referencia que he encontrado este último

Chrome sends two requests SO

chrome requests favorite icon

Chrome issue on google code

3

Este comportamiento puede ser causado por SRC = '' o SRC = '#' en IMG o (como en mi caso) etiqueta IFRAME. Sustitución '#' con 'sobre:.. En blanco" ha solucionado el problema

Aquí http://forums.mozillazine.org/viewtopic.php?f=7&t=1816755 dicen que las etiquetas de secuencia de comandos puede ser el problema, así

2

También puede ser causada por link etiquetas con href atributos vacíos, . al menos en cromo (v41) por ejemplo, cada uno de la siguiente línea generará una consulta adicional en la página:

<link rel="shortcut icon" href="" /> 
<link rel="icon" type="image/x-icon" href="" /> 
<link rel="icon" type="image/png" href="" /> 

se costuras que buscar atributos vacíos en la página es un buen punto de partida, ya sea href o src.

2

Mi observación de esta característica (error/característica/lo que sea) se produce cuando estoy escribiendo en una URL y el Autocompletar aterriza en una coincidencia sin dejar de escribir en la URL. Chrome lleva ese partido y va a buscar a la página, supongo que por los beneficios de almacenamiento en caché que se producirían al cargar la página ti mismo ....

0

En mi caso he Enpoint datos (JSON) a un servidor diferente y el navegador realice primero una solicitud vacía (Método de solicitud: OPCIONES) para verificar si un punto final acepta solicitudes de mi servidor, política de origen idéntico. También goot saber es una aplicación angular 1. En conclusión, realizo solicitudes de localhost a datos en línea falsos json.

Cuestiones relacionadas