2010-03-30 17 views
17

Si se llama a una página que requiere mucho procesamiento y el usuario hace clic en detener antes del final, ¿el navegador simplemente detiene la solicitud en el lado del cliente?¿Qué sucede cuando un usuario presiona parar en su navegador web?

¿O se envía un mensaje de "detención" al servidor, es decir, se cancela el proceso?

+9

Un gatito muere en algún lugar. –

+0

@Sky Sanders buen sentido del humor ... –

Respuesta

10

No se envía ningún mensaje al servidor cuando eso sucede. Cuando el usuario presiona el botón de detener, el navegador simplemente detiene el renderizado de la página e ignora cualquier respuesta adicional = del servidor.

Si la solicitud ya se ha enviado al servidor, el servidor generalmente continuará ejecutándola. Sin embargo, dependiendo de la implementación del servidor, puede detectar la conexión perdida. Lo que significa que no puede confiar en el hecho de que continuará en todos los casos.

+5

El servidor, sin embargo, puede detectar la conexión perdida. Si el servidor continuará ejecutándose después de que la conexión haya caído depende de la implementación del servidor y no puede confiar en el hecho de que continuará en todos los casos. – Rithiur

+0

@Rithiur, estoy de acuerdo contigo, es un buen comentario de tu parte. –

+0

He incorporado el comentario en la respuesta –

3

No hay mensajes/solicitudes "STOP" definidos en HTTP, ya que HTTP es sin estado, y detener una solicitud requeriría que usted conozca su ID. Naturalmente, tan pronto como la solicitud HTTP llega a un servidor, no se puede detener desde el exterior.

2

El servidor aún procesará la solicitud. Si está utilizando Visual Studio, puede adjuntarlo a los procesos de trabajo de IIS para ver si este es el caso. Depurar> Adjuntar al proceso

4

En realidad, envía un "mensaje de detención" al cerrar la conexión. Esto es cierto solo si todavía está esperando el resultado de la solicitud principal (no cuando termina de descargar contenido y comienza a cargar imágenes y cosas). Para que pueda detectar si el usuario presiona el botón de detención O si hay algún problema con la conexión, cuando recibe el mensaje de conexión cerrada.

Aquí hay alguna información sobre el manual de usuario de PHP: http://php.net/manual/en/features.connection-handling.php

En una nota lateral - que siempre depende de la aplicación del navegador y no hay una cierta manera de estar seguro de si el usuario pulsa el botón de parada o la conexión simplemente caído.

+2

Este es de hecho un detalle muy importante ya menudo olvidado. Si bien no existe un comando explícito de "detención", la conexión perdida PUEDE ser detectada. Esto, por ejemplo, abortará el script PHP actualmente en ejecución de forma predeterminada. Esto no ocurre inmediatamente cuando el usuario presiona detener, por lo que el script puede terminar de ejecutarse incluso si se presiona stop (ya que el usuario puede simplemente esperar en el búfer de salida del servidor y no en el script). Directamente desde la URL pegada: "Sin embargo, el comportamiento predeterminado es que se interrumpa el script cuando el cliente remoto se desconecta". – Rithiur

+0

@Rithiur, @bisko y @ Anton Gogolev: ¿la respuesta de Anton es contradictoria con la tuya? ¿Cómo se envía el "tipo de mensaje de detención" si HTTP es sin estado y no hay ID? Por favor denme más explicaciones chicos. Gracias –

Cuestiones relacionadas