¿Cómo funciona el botón Atrás en un navegador web?

Busqué en la web sobre esta pregunta, pero no encontré nada:

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

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

Gracias.

Su navegador web mantiene una stack (o lista, si lo desea) 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 el último, la lista se ve así:

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

Cuando presiona el botón Atrás, el navegador lo lleva de vuelta a la página anterior de la lista, de esta manera:

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

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

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

Si ahora va a, por ejemplo, abc.com, la lista cambia para que se vea así:

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

Tenga en cuenta que tanto yahoo.com como cnn.com han 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á en un sitio de compras (ne.com, como un pequeño ejemplo) que tiene categorías y subcategorías de productos para explorar. El diseñador del sitio ha proporcionado cuidadosamente migas de pan 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 

Desea volver a la categoría Hardware, por lo que utiliza las rutas de exploración para ir a la categoría primaria en lugar de usar 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, retrocediste (hasta un nivel), pero hacia el navegador avanzaste porque hiciste 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.

Finalmente, desea regresar 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. Al mirar 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 solo el botón Atrás, se necesitarían dos pulsaciones más, lo que lo llevaría de nuevo a la categoría Hardware y finalmente a la página principal. Parece tan obvio para nosotros los progtwigdores 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 progtwigr 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, 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.

Me gusta pensar en ello como volver a emitir mi última solicitud. Si realizó un GET simple, probablemente devolvería lo mismo que la última vez (menos el contenido dynamic). Si realizó una POST, va a volver a enviar el formulario (después de la confirmación) al servidor.

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.

Cuando hace clic en la mayoría de los navegadores, reenvía la última solicitud http o carga una caché si el navegador almacena en caché los sitios.

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) 

El historial de páginas visitadas se mantiene en forma de stack. 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.

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 de un navegador y la configuración del usuario. Diseña tu software para que todo esto no importe mucho.

Perdón por una respuesta no muy directa, pero ya hay algunas respuestas directas.

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

¿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.