2009-08-21 15 views
70

He buscado en la Web acerca de esta pregunta, pero no he encontrado nada:¿Cómo funciona el botón Atrás en un navegador web?

¿Cuál es la lógica del botón de retroceso? ¿Qué sucede cuando presionamos el botón Atrás en un navegador web?

Realmente me gustaría saber más sobre eso.

Gracias.

+12

¿Reenvía la solicitud o carga la página desde la caché local? ¿Las cookies que se crearon en la primera respuesta se envían cuando devuelves el golpe? etc. – Jimmy

Respuesta

85

Su navegador web mantiene una pila (o lista, si se quiere) de las páginas Web que ha visitado en esa ventana. Digamos que su página de inicio es google.com y desde allí visita algunos otros sitios web: youtube.com, yahoo.com y cnn.com. Al visitar la última, la lista es el siguiente:

google.com -> youtube.com -> yahoo.com -> cnn.com 
              ^
              | 
             current page 

Al pulsar el botón Atrás, el navegador te lleva de vuelta a la página anterior de la lista, así:

google.com -> youtube.com -> yahoo.com -> cnn.com 
           ^
           | 
          current page 

En En este punto, puede presionar Atrás nuevamente para ir a youtube.com, o puede presionar Reenviar para volver a colocarlo en cnn.com. Digamos que se pulsa una segunda vez:

google.com -> youtube.com -> yahoo.com -> cnn.com 
       ^
        | 
       current page 

Si ahora vas a, por ejemplo, abc.com, la lista cambia a tener este aspecto:

google.com -> youtube.com -> abc.com 
          ^
           | 
          current page 

Tenga en cuenta que tanto yahoo.com y cnn.com ha desaparecido de la lista. Esto es porque tomaste una nueva ruta. El navegador solo mantiene una lista de las páginas que visitaste para llegar a donde estás ahora, no un historial de todas las páginas en las que alguna vez has estado. El navegador tampoco sabe nada sobre la estructura del sitio que está visitando, lo que puede llevar a un comportamiento sorprendente.

Estás en un sitio de compras (ne.com, como un breve ejemplo) que tiene categorías y subcategorías de productos para explorar. El diseñador del sitio ha proporcionado cuidadosamente breadcrumbs cerca de la parte superior de la ventana para que pueda navegar a través de las categorías. Usted comienza en la página superior del sitio, haga clic en Hardware, luego en Memoria. La lista ahora se ve así:

google.com -> ne.com -> ne.com/hw -> ne.com/hw/mem 
             ^
              | 
             current page 

¿Quieres ir de nuevo a la categoría de hardware, por lo que utilizar el pan rallado para subir a la categoría padre en lugar de utilizar el botón Atrás. Ahora la lista del navegador se ve así:

google.com -> ne.com -> ne.com/hw -> ne.com/hw/mem -> ne.com/hw 
                 ^
                  | 
                current page 

De acuerdo con la estructura del sitio, que fueron hacia atrás (hasta un nivel), sino para el navegador que se fue hacia adelante, porque ha hecho clic en un enlace. Cada vez que haga clic en un enlace o escriba una URL en la barra de direcciones, avanzará en lo que respecta al navegador, ya sea que ese enlace lo lleve a una página en la que ya ha estado o no.

Por último, desea volver a la página principal del sitio (ne.com). Podría usar las migas de pan, pero esta vez haga clic en el botón Atrás - parece obvio que debería llevarlo a un nivel, ¿verdad? Pero, ¿a dónde te lleva?

Inicialmente es confuso para muchos usuarios (incluido yo mismo, cuando hago exactamente esto) que te lleva "abajo" un nivel, de vuelta a la categoría Memoria. En cuanto a la lista de páginas, es fácil ver por qué:

google.com -> ne.com -> ne.com/hw -> ne.com/hw/mem -> ne.com/hw 
              ^
              | 
             current page 

Para volver a la página principal utilizando sólo el botón Volver requeriría dos prensas más, que le llevará a "volver" a la categoría de hardware y finalmente a la página principal. Parece tan obvio para nosotros los programadores lo que está sucediendo, pero sorprende a los usuarios regulares todo el tiempo porque no se dan cuenta de que el navegador no sabe nada sobre la estructura jerárquica de cualquier sitio web en el que se encuentren.

¿Sería genial si los navegadores permitieran a los diseñadores del sitio programar el botón Atrás para hacer lo obvio (llevarlo a un nivel superior) en lugar de lo que sea que haga ahora?

Editar: Un comentarista preguntó si el navegador recarga la página o simplemente la muestra fuera de su caché local.

La respuesta es que depende. Los diseñadores del sitio pueden especificar si el navegador debe almacenar en caché la página o no. Para las páginas configuradas como no almacenadas en caché, el navegador vuelve a cargar la página desde el servidor cuando presiona Atrás, como si fuera la primera vez que la está visitando. Para las páginas en caché, el navegador lo muestra fuera de la memoria caché, que es mucho más rápido.

+4

Cuando el navegador está buscando en la memoria caché, ¿marca la fecha de caducidad en el encabezado de la respuesta del servidor? Supongo que si la página expiró, el navegador devolverá la misma consulta, ¿no? ¿Los get y post se manejan de la misma manera con respecto al botón Atrás? Gracias por tu gran respuesta. –

+4

Primera pregunta: sí, eso es correcto. Si la página ha caducado, el navegador debe volver a solicitar la página usando la misma URL y datos POST. Pero para las operaciones POST, la mayoría de los navegadores preguntan al usuario si desean volver a enviarlo. Supongo que volver a enviar los datos de POST podría dar como resultado publicaciones duplicadas, transacciones duplicadas, etc. Depende del diseñador del sitio evitar que eso suceda. –

+0

Sí, pero en el caso de un POST, creo que el navegador solo preguntará en el caso de POST que ha expirado. ¿Estoy en lo cierto? Porque cuando estaba haciendo desarrollo con ASP.net, el botón Atrás estaba posteando nuevamente en el servidor sin preguntar. –

2

La idea básica es volver a la última página o división lógica del sitio.

Mirando a Gmail verás si haces una búsqueda y haces clic en un mensaje, luego presiona el botón Atrás y volverás a la búsqueda que hiciste.

Al hacer clic en la mayoría de los navegadores, reenviará la última solicitud http o cargará una caché si el navegador almacena en caché los sitios.

+0

¿Cuándo utiliza el navegador la memoria caché y cuándo reenvía una solicitud? –

+0

Depende del navegador y de lo que se haya hecho hasta ese momento. Puede configurar la mayoría de los navegadores para que no se almacenen en la memoria caché, por lo que siempre se volverán a cargar. Hay una metaetiqueta HTML para el almacenamiento en caché, pero respetando eso depende del navegador. – BobBrez

-1

¿El navegador carga la última página vista antes de la actual, y luego sigue cualquier redirección que pueda suceder?

Parece que me falta el sentido de la pregunta.

+0

Probablemente deseen deshabilitar el botón Atrás o evitar su uso. Buena suerte. –

5

Me gusta pensar que se trata de una nueva solicitud. Si realizó un GET simple, probablemente devolvería lo mismo que la última vez (menos el contenido dinámico). Si realizó una POST, va a volver a enviar el formulario (después de la confirmación) al servidor.

1

El historial de las páginas visitadas se mantiene en forma de pila. Cuando "abre" las tres páginas superiores (A, B, C, por ejemplo) y luego va a una página diferente D, no puede volver a B presionando hacia adelante.

2

creo que la forma más fácil de explicar esto es en pseudocódigo:

class Page: 
    String url, ... 
    Page previous, next # implements a doubly-linked list 

class History: 
    Page current # current page 

    void back(): 
     if current.previous == null: 
      return 
     current = current.previous 
     refresh() 

    void forward(): 
     if current.next == null: 
      return 
     current = current.next 
     refresh() 

    void loadPage(Page newPage): 
     newPage.previous = current 
     current.next = newPage # remove all the future pages 
     current = current.next 
     display(current) 
0

Como devoloper, debe asegurarse de que su aplicación web funcione independientemente de cómo maneje el navegador el botón Atrás :-) ¿Reenvía la solicitud? ¿Es la nueva solicitud idéntica a la anterior o difiere de alguna manera? ¿El navegador preguntará al usuario para confirmar el re-POST? ¿Qué elementos de la página volverán a solicitarse y qué cargó desde el caché? ¿El navegador respetará mis encabezados de control de caché?

Las respuestas a estas preguntas dependen de la marca, la versión del navegador y la configuración del usuario. Diseña tu software para que todo esto no importe mucho.

Lo siento por una respuesta no muy directa, pero ya hay algunas respuestas directas.

+0

Por desgracia, teniendo en cuenta todos los posibles efectos del botón Atrás, algo que vuelve loco a la mayoría de los desarrolladores, incluido yo mismo. – Louise

0

un navegador siempre almacenó las páginas para su recuerdo y cuando presionamos el botón Atrás no envía la solicitud al servidor de la página anterior sino que simplemente ve su caché donde almacena las páginas y sigue el Regla LIFO es por eso que nos da esa página primero al presionar el botón Atrás que abrimos en el último

+2

No, no funciona, deja eso! Si la memoria caché ya no es válida, envía una solicitud al servidor para obtener la página nuevamente. –

Cuestiones relacionadas