J'ai cherché sur le Web à propos de cette question mais je n'ai rien trouvé:
Quelle est la logique du bouton retour? Que se passe-t-il lorsque nous appuyons sur le bouton de retour d'un navigateur Web?
J'aimerais vraiment en savoir plus à ce sujet.
Merci.
Votre navigateur Web conserve une pile (ou une liste, si vous voulez) des pages Web que vous avez visitées dans cette fenêtre. Supposons que votre page d'accueil soit google.com et que vous visitiez ensuite quelques autres sites Web: youtube.com, yahoo.com et cnn.com. En visitant le dernier, la liste ressemble à ceci:
google.com -> youtube.com -> yahoo.com -> cnn.com
^
|
current page
Lorsque vous appuyez sur le bouton Retour, le navigateur vous ramène à la page précédente de la liste, comme ceci:
google.com -> youtube.com -> yahoo.com -> cnn.com
^
|
current page
À ce stade, vous pouvez appuyer à nouveau sur Retour pour vous emmener sur youtube.com, ou vous pouvez appuyer sur Suivant pour vous rediriger vers cnn.com. Disons que vous appuyez une deuxième fois sur Retour:
google.com -> youtube.com -> yahoo.com -> cnn.com
^
|
current page
Si vous allez maintenant sur, disons, abc.com, la liste change pour ressembler à ceci:
google.com -> youtube.com -> abc.com
^
|
current page
Notez que yahoo.com et cnn.com ont disparu de la liste. C'est parce que vous avez pris un nouvel itinéraire. Le navigateur conserve uniquement une liste des pages que vous avez visitées pour arriver là où vous vous trouvez, pas un historique de toutes les pages que vous avez visitées. Le navigateur ne connaît pas non plus la structure du site que vous visitez, ce qui peut entraîner un comportement surprenant.
Vous êtes sur un site d'achat (ne.com, par exemple) qui propose des catégories et des sous-catégories de produits à parcourir. Le concepteur du site a judicieusement fourni fil d'Ariane en haut de la fenêtre pour vous permettre de parcourir les catégories. Vous commencez en haut de la page du site, cliquez sur Matériel, puis sur Mémoire. La liste ressemble maintenant à ceci:
google.com -> ne.com -> ne.com/hw -> ne.com/hw/mem
^
|
current page
Vous souhaitez revenir à la catégorie Matériel, vous utilisez donc le fil d'Ariane pour accéder à la catégorie parent au lieu d'utiliser le bouton Précédent. Maintenant, la liste des navigateurs ressemble à ceci:
google.com -> ne.com -> ne.com/hw -> ne.com/hw/mem -> ne.com/hw
^
|
current page
Selon la structure du site, vous avez reculé (d'un niveau), mais vers le navigateur, vous avez avancé car vous avez cliqué sur un lien. Chaque fois que vous cliquez sur un lien ou saisissez une URL dans la barre d'adresse, vous avancez en ce qui concerne le navigateur, que ce lien vous mène ou non à une page que vous avez déjà consultée.
Enfin, vous souhaitez revenir à la page principale du site (ne.com). Vous pouvez utiliser le fil d'Ariane, mais cette fois vous cliquez sur le bouton Retour - il semble évident que cela devrait vous faire monter d'un niveau, non? Mais où cela vous mène-t-il?
Au début, il est déroutant pour de nombreux utilisateurs (moi y compris, lorsque je fais exactement cela) que cela vous ramène à un niveau inférieur, de retour à la catégorie Mémoire. En regardant la liste des pages, il est facile de comprendre pourquoi:
google.com -> ne.com -> ne.com/hw -> ne.com/hw/mem -> ne.com/hw
^
|
current page
Pour revenir à la page principale en utilisant uniquement le bouton Précédent, il faudrait deux pressions supplémentaires, vous ramenant à la catégorie Matériel et enfin à la page principale. Cela semble si évident pour les programmeurs, mais cela surprend tout le temps les utilisateurs réguliers car ils ne réalisent pas que le navigateur ne sait rien de la structure hiérarchique du site Web sur lequel ils se trouvent.
Serait-il formidable si les navigateurs permettaient aux concepteurs de sites de programmer le bouton Retour pour faire la chose la plus évidente (vous faire monter d'un niveau) plutôt que ce qu'il fait maintenant?
Modifier: un intervenant a demandé si le navigateur rechargeait la page ou l'affichait simplement hors de son cache local.
La réponse est que cela dépend. Les concepteurs de sites peuvent spécifier si le navigateur doit mettre en cache la page ou non. Pour les pages définies comme non mises en cache, le navigateur recharge la page à partir du serveur lorsque vous appuyez sur Retour, comme si c'était la première fois que vous la visitiez. Pour les pages en cache, le navigateur l'affiche hors du cache, ce qui est beaucoup plus rapide.
J'aime à y voir comme une nouvelle émission de ma dernière demande. Si vous avez effectué un simple GET, il retournerait probablement la même chose que la dernière fois (moins le contenu dynamique). Si vous avez effectué un POST, vous allez renvoyer le formulaire (après confirmation) au serveur.
L'idée de base est de revenir à la dernière page ou division de site logique.
En regardant Gmail, vous verrez si vous effectuez une recherche et cliquez sur un message, puis appuyez sur le bouton de retour, il vous ramènera à la recherche que vous avez effectuée.
Lorsque vous cliquez dessus dans la plupart des navigateurs, il renvoie la dernière demande http ou charge un cache si le navigateur met en cache des sites.
Je pense que la façon la plus simple d'expliquer cela est en pseudocode:
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)
Un historique des pages consultées est conservé sous forme de pile. Lorsque vous "sautez" les trois premières pages (A, B, C, par exemple) et que vous passez ensuite à une autre page D, vous ne pouvez plus accéder à B en appuyant sur la touche avant.
En tant que devoloper, vous devez vous assurer que votre application Web fonctionne quelle que soit la façon dont le navigateur gère le bouton Retour :-) Renvoie-t-il la demande? La nouvelle demande est-elle identique à l'ancienne ou diffère-t-elle d'une manière ou d'une autre? Le navigateur demandera-t-il à l'utilisateur de confirmer la nouvelle publication? Quels éléments de la page seront redemandés et quels éléments seront chargés à partir du cache? Le navigateur respectera-t-il mes en-têtes de contrôle de cache?
Les réponses à ces questions dépendent de la marque, de la version du navigateur et des paramètres utilisateur. Concevez votre logiciel de manière à ce que tout cela ne soit pas si important.
Désolé pour la réponse pas très directe, mais il y a déjà des réponses claires ici.
un navigateur a toujours stocké les pages pour sa mémorisation et lorsque nous appuyons sur le bouton de retour, il n'envoie pas la demande au serveur pour la page précédente à la place il voit juste son cache où il a stocké les pages et il suit le LIFO règle c'est pourquoi il nous donne cette page d'abord en appuyant sur le bouton de retour que nous avons ouvert dans le dernier