2009-08-21 9 views
70

Ich suchte im Internet nach dieser Frage, aber ich fand nichts:Wie funktioniert die Zurück-Schaltfläche in einem Webbrowser?

Was ist die Logik der Zurück-Taste? Was passiert, wenn wir in einem Webbrowser auf die Zurück-Schaltfläche klicken?

Ich möchte wirklich mehr darüber verstehen.

Vielen Dank.

+12

Gibt es die Anfrage erneut oder lädt es die Seite aus dem lokalen Cache? Werden Cookies, die in der ersten Antwort erstellt wurden, gesendet, wenn Sie zurückschlagen? usw. – Jimmy

Antwort

85

Ihr Web-Browser hält einen Stapel (oder eine Liste, wenn man so will) die Webseiten, die Sie in diesem Fenster besucht haben. Nehmen wir an, Ihre Startseite ist google.com und von dort aus besuchen Sie einige andere Websites: youtube.com, yahoo.com und cnn.com. Nach den letzten Besuch, sieht die Liste wie folgt aus:

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

Wenn Sie die Zurück-Taste drücken, nimmt der Browser Sie zurück auf die vorherige Seite in der Liste, wie folgt aus:

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

Bei An diesem Punkt können Sie erneut auf Zurück drücken, um zu youtube.com zu gelangen, oder Sie können auf Weiter drücken, um Sie erneut auf cnn.com zu setzen. Angenommen, Sie haben ein zweites Mal drücken Zurück:

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

Wenn Sie jetzt gehen, sagen wir, abc.com, die Liste Änderungen wie folgt aussehen:

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

Beachten Sie, dass beide yahoo.com und cnn.com sind von der Liste verschwunden. Dies liegt daran, dass Sie eine neue Route genommen haben. Der Browser führt nur eine Liste der Seiten, die Sie besucht haben, um dorthin zu gelangen, wo Sie sich gerade befinden, und nicht die Geschichte jeder Seite, die Sie jemals besucht haben. Der Browser weiß auch nichts über die Struktur der Website, die Sie besuchen, was zu einem überraschenden Verhalten führen kann.

Sie sind auf einer Einkaufsseite (ne.com, als ein kurzes Beispiel), das Kategorien und Unterkategorien von Produkten zum Durchsuchen hat. Der Website-Designer hat nachdenklich breadcrumbs oben im Fenster bereitgestellt, damit Sie durch die Kategorien navigieren können. Sie beginnen auf der obersten Seite der Website, klicken Sie auf Hardware und dann auf Speicher. Die Liste sieht nun wie folgt aus:

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

Sie wollen der Kategorie Hardware zurück zu gehen, so verwenden Sie die Semmelbrösel in die übergeordnete Kategorie zu gehen, anstatt die Zurück-Taste verwenden. Nun sucht der Browser-Liste wie folgt aus:

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

Laut der Website-Struktur, Sie ging nach hinten (bis ein Niveau), aber an den Browser gingen Sie nach vorne, weil Sie auf einen Link geklickt. Jedes Mal, wenn Sie auf einen Link klicken oder eine URL in die Adressleiste eingeben, gehen Sie so weit wie es der Browser betrifft vorwärts, unabhängig davon, ob dieser Link Sie zu einer Seite führt, auf der Sie bereits waren.

Schließlich möchten Sie auf die Hauptseite (ne.com) zurückkehren. Du könntest die Breadcrumbs benutzen, aber diesmal klickst du auf die Zurück-Taste - es scheint offensichtlich, dass es dich eine Ebene höher bringen sollte, oder? Aber wo kommt es hin?

Es ist zunächst verwirrend für viele Benutzer (ich selbst eingeschlossen, wenn ich genau dies tue), dass es Sie "down" eine Ebene, zurück in die Kategorie Speicher. Ein Blick auf die Liste der Seiten, dann ist es leicht einzusehen, warum:

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

Um nur die Schaltfläche Zurück zur Startseite mit zurückgehen würde zwei weitere Pressen benötigen, nehmen Sie „zurück“ in die Kategorie Hardware und schließlich auf die Hauptseite. Es scheint für uns Programmierer so offensichtlich zu sein, was vor sich geht, aber es überrascht ständig die regelmäßigen Benutzer, weil sie nicht erkennen, dass der Browser nichts über die hierarchische Struktur der Website weiß, auf der sie sich gerade befinden.

Wäre es großartig, wenn die Browser den Site-Designern erlauben würden, die Zurück-Schaltfläche zu programmieren, um das Offensichtliche zu tun (anstatt ein Niveau zu erreichen), anstatt was immer es jetzt tut?

Bearbeiten: Ein Kommentator fragte, ob der Browser die Seite neu lädt oder sie einfach aus dem lokalen Cache anzeigt.

Die Antwort ist es hängt davon ab. Websitedesigner können angeben, ob der Browser die Seite zwischenspeichern soll oder nicht. Bei Seiten, die als nicht zwischengespeichert festgelegt sind, lädt der Browser die Seite vom Server neu, wenn Sie Zurück drücken, als ob Sie das erste Mal dort waren. Für zwischengespeicherte Seiten zeigt der Browser ihn aus dem Cache, der viel schneller ist.

+4

Wenn der Browser im Cache sucht, überprüft er das Ablaufdatum in der Kopfzeile der Serverantwort? Ich denke, wenn die Seite abgelaufen ist, wird der Browser dieselbe Abfrage zurücksenden, nein? Werden Get und Post in Bezug auf den Zurück-Button gleich behandelt? Danke für deine großartige Antwort. –

+4

Erste Frage: Ja, das ist richtig. Wenn die Seite abgelaufen ist, sollte der Browser die Seite erneut mit denselben URL- und POST-Daten anfordern. Bei POST-Vorgängen fragen die meisten Browser den Benutzer nach, ob er sie erneut senden möchte. Meine Vermutung ist, dass das erneute Versenden der POST-Daten möglicherweise zu doppelten Buchungen, doppelten Transaktionen usw. führen kann. Es liegt an dem Website-Designer, dies zu verhindern. –

+0

Ja, aber im Falle eines POST, denke ich, dass der Browser fragt nur im Falle von POST, die abgelaufen ist. Habe ich recht? Weil, als ich mit ASP.net Entwicklung machte, der Zurückknopf wieder auf dem Server posten ließ, ohne zu fragen. –

2

Die Grundidee besteht darin, zur letzten Seite oder zur Division der logischen Site zurückzukehren.

Wenn Sie Gmail sehen, werden Sie sehen, ob Sie eine Suche durchführen und auf eine Nachricht klicken. Drücken Sie dann die Zurück-Taste, um wieder zur von Ihnen durchgeführten Suche zurückzukehren.

Wenn Sie in den meisten Browsern darauf klicken, wird entweder die letzte HTTP-Anfrage erneut gesendet oder ein Cache geladen, wenn der Browser Sites zwischenspeichert.

+0

Wann verwendet der Browser den Cache und wann sendet er eine Anfrage erneut? –

+0

Es hängt vom Browser ab und was bis zu diesem Punkt gemacht wurde. Sie können festlegen, dass die meisten Browser nicht zwischengespeichert werden und daher immer neu geladen werden. Es gibt einen HTML-Metatag für das Caching, aber respektieren Sie das bis zum Browser. – BobBrez

-1

Der Browser lädt die zuletzt angezeigte Seite vor die aktuelle Seite und folgt dann einer möglichen Umleitung?

Ich irgendwie scheint der Punkt der Frage zu fehlen.

+0

Wahrscheinlich möchten sie die Zurück-Schaltfläche deaktivieren - oder ihre Verwendung verhindern. Viel Glück. –

5

Ich mag es als erneute Ausgabe meiner letzten Anfrage zu denken. Wenn Sie ein einfaches GET durchgeführt haben, würde es wahrscheinlich das gleiche wie beim letzten Mal (minus dynamischem Inhalt) zurückgeben. Wenn Sie einen POST durchgeführt haben, senden Sie das Formular (nach der Bestätigung) erneut an den Server.

1

Eine Historie der aufgerufenen Seiten wird in einer stapelartigen Form gehalten. Wenn Sie die oberen drei Seiten (zum Beispiel A, B, C) "aufklappen" und dann zu einer anderen Seite D gehen, können Sie nicht mehr zu B gelangen, indem Sie vorwärts schlagen.

2

Ich denke, der einfachste Weg, dies in Pseudo-Code ist zu erklären:

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

Als Devoloper sollten Sie sicherstellen, dass Ihre Webapp funktioniert, egal wie der Browser die Zurück-Schaltfläche behandelt :-) Sendet es die Anfrage erneut? Ist die neue Anfrage identisch mit der alten oder unterscheidet sie sich in irgendeiner Weise? Wird der Browser den Benutzer bitten, den erneuten POST zu bestätigen? Welche Elemente der Seite werden erneut angefordert und welche aus dem Cache geladen? Wird der Browser meine Cache-Control-Header respektieren?

Antworten auf diese Frage hängen von machen, Version eines Browsers und Benutzereinstellungen ab. Entwerfen Sie Ihre Software so, dass das alles nicht so wichtig ist.

Sorry für nicht sehr direkte Antwort, aber es gibt hier schon einige klare Antworten.

+0

Ach, unter Berücksichtigung aller möglichen Auswirkungen der Zurück-Taste etwas, das die meisten Entwickler verrückt, mich eingeschlossen. – Louise

0

ein Browser immer die Seiten für ihre Erinnerung gespeichert und wenn wir die Zurück-Taste es nicht die Anfrage an den Server für die vorherige Seite stattdessen sehen Sie nur seinen Cache , wo es die Seiten gespeichert und es folgen LIFO-Regel, warum gibt es uns diese Seite zuerst auf Drücken der Zurück-Taste, die wir in der letzten geöffnet

+2

Nein, es funktioniert nicht! Wenn der Cache nicht mehr gültig ist, sendet er eine Anfrage zurück an den Server, um die Seite erneut zu erhalten. –