88 votes

Comment fonctionne le bouton Précédent dans un navigateur Web?

J'ai cherché sur le Web à propos de cette question, mais je n'ai rien trouvé:

Quelle est la logique de la touche retour? Ce qui se passe quand nous avons touché le bouton de retour sur un navigateur Web?

Je voudrais vraiment comprendre plus à ce sujet.

Je vous remercie.

103voto

Barry Brown Points 9774

Votre navigateur web maintient une pile (ou de la liste, si vous voulez) des pages web que vous avez visitées dans cette fenêtre. Disons que votre page d'accueil est google.com et à partir de là que vous visitez quelques autres sites: youtube.com, yahoo.com et cnn.com. Lors d'une visite à la dernière, la liste ressemble à ceci:

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

Lorsque vous appuyez sur le bouton de Retour, le navigateur vous permet de revenir à la page précédente dans la liste, comme ceci:

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

À ce stade, vous pouvez appuyer sur Retour pour vous emmener à youtube.com ou vous pouvez appuyer sur l'Avant de vous mettre à l'cnn.com de nouveau. Disons que vous appuyez sur pour Revenir une seconde fois:

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

Maintenant, si vous allez à, disons, abc.com la liste des changements à ressembler à ceci:

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

Notez que les deux yahoo.com et cnn.com ont disparu de la liste. C'est parce que vous avez pris un nouvel itinéraire. Le navigateur ne gère une liste des pages que vous avez consultées pour arriver là où vous êtes maintenant, pas une histoire de chaque page, vous avez jamais été. Le navigateur ne sais rien à propos de la structure du site que vous visitez, ce qui peut conduire à certains comportement surprenant.

Vous êtes sur un site d'achats (ne.com comme un exemple court) qui a des catégories et sous-catégories de produits à parcourir. Le concepteur du site a judicieusement fourni chapelure près du haut de la fenêtre pour vous permettre de naviguer à travers les catégories. Vous commencez en haut de la page du site, cliquez sur le Matériel, puis de la Mémoire. La liste ressemble maintenant à ceci:

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

Vous voulez retourner à la catégorie Matériel, alors vous utilisez la chapelure pour aller jusqu'à la catégorie mère au lieu d'utiliser le bouton Retour. Maintenant, le navigateur de la liste ressemble à ceci:

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

Selon la structure du site, vous êtes allé vers l'arrière (un niveau), mais le navigateur que vous allé de l'avant parce que vous avez cliqué sur un lien. Chaque fois que vous cliquez sur un lien ou tapez une URL dans la barre d'adresse, vous allez de l'avant aussi loin que le navigateur est concerné, si oui ou non ce lien vous amène à une page que vous avez déjà été.

Enfin, vous souhaitez retourner au site principal de la page (ne.com). Vous pouvez utiliser de la chapelure, mais cette fois vous cliquez sur le bouton -- il semble évident qu'il vous faudra monter d'un niveau, non? Mais d'où vient-il?

C'est d'abord source de confusion pour de nombreux utilisateurs (dont moi-même, quand il m'arrive de faire exactement cela) qu'il vous faut "descendre" un niveau, de revenir à la Mémoire de la catégorie. En regardant la liste des pages, il est facile de voir 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 de Retour, il faudra deux pressoirs de plus, vous "de retour" à la catégorie Matériel et, enfin, à la page principale. Il semble donc évident pour nous les programmeurs de ce qu'il se passe, mais il surprend le diable hors d'utilisateurs réguliers tout le temps parce qu'ils ne réalisent pas que le navigateur ne sais rien à propos de la structure hiérarchique de ce site, ils se trouvent sur.

Ce serait génial si les navigateurs ne laissez concepteurs de site programme le bouton Retour pour faire la chose la plus évidente (vous prenez un niveau) plutôt que ce qu'il fait maintenant?

Edit: Un intervenant a demandé si le navigateur recharge la page ou tout simplement l'affiche de son cache local.

La réponse est: cela dépend. Les concepteurs de Site permet de spécifier si le navigateur doit mettre en cache la page ou pas. Pour les pages qui sont définies comme non mis en cache, le navigateur recharge la page à partir du serveur lorsque vous appuyez sur l'Arrière, comme si c'était la première fois que vous visitez. Pour les pages mises en cache, le navigateur l'affiche de la mémoire cache, ce qui est beaucoup plus rapide.

5voto

John Points 3067

J'aime penser que c'est de re-délivrance de ma dernière demande. Si vous avez effectué un GET simple, il reviendrait probablement la même chose qu'il a fait la dernière fois (moins de contenu dynamique). Si tu avais fait un POST, vous allez soumettre à nouveau le formulaire (après confirmation) pour le serveur.

2voto

Imagist Points 5348

Je pense que la meilleure façon d'expliquer ce que c'est dans le pseudo-code:

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)

1voto

BobBrez Points 409

L'idée de base est de revenir à la dernière page ou site logique de la division.

En regardant Gmail, vous verrez si vous faites une recherche, et cliquez sur un message, puis appuyez sur le bouton retour vous ramènera à la recherche que vous avez fait.

Lorsque vous cliquez dessus dans la plupart des navigateurs, il va le renvoyer de la dernière requête http ou charger une mémoire cache si le navigateur met en cache les sites.

1voto

kajaco Points 1289

Une histoire de pages vues est gardé dans une pile-comme la forme. Lorsque vous "pop" les trois premières pages (A, B, C, par exemple) et puis passez à une autre page D, vous ne pouvez pas vous rendre à B de nouveau en appuyant sur l'avant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X