web-dev-qa-db-fra.com

Comment fonctionne le bouton Retour dans un navigateur Web?

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.

79
Pierre Thibault

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.

94
Barry Brown

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.

5
John Hoven

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.

2
BobBrez

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)
2
Imagist

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.

1
kajaco

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.

0
Ilya Birman

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

0
Dileep kumar