Webブラウザの[戻る]ボタンはどのように機能しますか?


84

この質問についてWebを検索しましたが、何も見つかりませんでした。

戻るボタンのロジックは何ですか?Webブラウザの戻るボタンを押すとどうなりますか?

それについてもっと知りたいです。

ありがとうございました。


14
リクエストを再送信しますか、それともローカルキャッシュからページをロードしますか?最初の応答で作成されたCookieは、反撃したときに送信されますか?など
ジミー

回答:


99

Webブラウザーは、そのウィンドウでアクセスしたWebページのスタック(または、必要に応じてリスト)を保持します。ホームページがgoogle.comで、そこからyoutube.com、yahoo.com、cnn.comなどの他のいくつかのウェブサイトにアクセスするとします。最後のものにアクセスすると、リストは次のようになります。

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

[戻る]ボタンを押すと、ブラウザは次のようにリストの前のページに戻ります。

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

この時点で、もう一度[戻る]を押してyoutube.comに移動するか、[進む]を押してcnn.comに戻ることができます。もう一度戻るを押したとしましょう。

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

たとえばabc.comにアクセスすると、リストは次のように変更されます。

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

yahoo.comとcnn.comの両方がリストから削除されていることに注意してください。これは、新しいルートを選択したためです。ブラウザは、現在の場所にアクセスするためにアクセスしたページのリストのみを保持し、これまでにアクセスしたすべてのページの履歴は保持しません。また、ブラウザはアクセスしているサイトの構造について何も認識していないため、予期しない動作が発生する可能性があります。

閲覧する製品のカテゴリとサブカテゴリがあるショッピングサイト(簡単な例としてne.com)を使用しています。サイトデザイナーは、ウィンドウの上部近くにパンくずリストを慎重に提供して、カテゴリ間を移動できるようにしています。サイトのトップページから始めて、[ハードウェア]、[メモリ]の順にクリックします。リストは次のようになります。

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

ハードウェアカテゴリに戻りたいので、[戻る]ボタンを使用する代わりに、ブレッドクラムを使用して親カテゴリに移動します。これで、ブラウザリストは次のようになります。

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

サイトの構造によると、後方(レベルアップ)になりましたが、ブラウザではリンクをクリックしたために前方に移動しました。リンクをクリックするか、アドレスバーにURLを入力するたびに、そのリンクから既にアクセスしたページに移動するかどうかに関係なく、ブラウザに関する限り先に進みます。

最後に、メインサイトページ(ne.com)に戻ります。ブレッドクラムを使用することもできますが、今回は[戻る]ボタンをクリックします。これで1レベル上がるはずですよね。しかし、それはあなたをどこに連れて行くのですか?

最初は、多くのユーザー(私も含めて、これを正確に実行する場合)にとって、レベルを「下げて」メモリカテゴリに戻すことは混乱を招きます。ページのリストを見ると、理由が簡単にわかります。

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

[戻る]ボタンだけを使用してメインページに戻るには、さらに2回押す必要があり、ハードウェアカテゴリに「戻り」、最後にメインページに戻ります。私たちプログラマーには何が起こっているのかは明らかなようですが、ブラウザーがたまたまどのWebサイトにある場合でも、階層構造について何も知らないことに気付いていないため、常連ユーザーはいつも驚いています。

ブラウザがサイト設計者に[戻る]ボタンをプログラムさせて、現在のことではなく、明白なこと(レベルを上げる)を実行できるようになれば素晴らしいでしょうか?

編集:コメント投稿者は、ブラウザがページをリロードするのか、それとも単にローカルキャッシュからページを表示するのかを尋ねました。

答えはそれが依存するということです。サイト設計者は、ブラウザがページをキャッシュするかどうかを指定できます。キャッシュされていないものとして設定されているページの場合、[戻る]を押すと、初めてアクセスしたときと同じように、ブラウザがサーバーからページを再読み込みします。キャッシュされたページの場合、ブラウザはキャッシュからページを表示します。これははるかに高速です。


5
ブラウザがキャッシュを調べているとき、サーバー応答のヘッダーの有効期限をチェックしますか?ページの有効期限が切れた場合、ブラウザは同じクエリを送り返すと思いますね。取得と投稿は、戻るボタンに関して同じように処理されますか?素晴らしい答えをありがとう。
Pierre Thibault

5
最初の質問:はい、その通りです。ページの有効期限が切れている場合、ブラウザは同じURLとPOSTデータを使用してページを再リクエストする必要があります。ただし、POST操作の場合、ほとんどのブラウザーはユーザーに再送信するかどうかを尋ねます。私の推測では、POSTデータを再送信すると、投稿が重複したり、トランザクションが重複したりする可能性があります。それを防ぐのはサイト設計者の責任です。
バリーブラウン

はい。ただし、POSTの場合、ブラウザはPOSTの有効期限が切れている場合にのみ要求すると思います。私は正しいですか?ASP.netで開発を行っていたとき、戻るボタンが質問せずにサーバーに再度投稿していたためです。
ピエール・

おそらくブラウザによって異なります。私のブラウザ(Safari)は常に尋ねます-少なくとも私それが常に尋ねていると思います
バリーブラウン

私はSafariを使用していました。常に尋ねるとは限りません。それは私が説明した論理に従っているに違いありません。
ピエール・ティボールト

5

私はそれを私の最後の要求を再発行することと考えるのが好きです。単純なGETを実行した場合、おそらく前回と同じものが返されます(動的コンテンツを除く)。POSTを実行した場合は、(確認後に)フォームをサーバーに再送信します。


2

基本的な考え方は、最後のページまたは論理的なサイト分割に戻ることです。

Gmailを見ると、検索を実行してメッセージをクリックし、[戻る]ボタンを押すと、実行した検索に戻ることができます。

ほとんどのブラウザでクリックすると、最後のhttpリクエストが再送信されるか、ブラウザがサイトをキャッシュしている場合はキャッシュが読み込まれます。


ブラウザはいつキャッシュを使用し、いつリクエストを再送信しますか?
ピエール・ティボールト

それはブラウザとそれまでに何が行われたかによります。ほとんどのブラウザはキャッシュしないように設定できるため、常にリロードされます。キャッシュ用のHTMLメタタグがありますが、それを尊重するのはブラウザ次第です。
BobBrez 2009

2

これを説明する最も簡単な方法は、擬似コードを使用することだと思います。

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)

1

閲覧されたページの履歴は、スタックのような形式で保持されます。上位3ページ(たとえば、A、B、C)を「ポップ」してから、別のページDに移動すると、前に押してもBに戻ることはできません。


0

開発者として、ブラウザが[戻る]ボタンをどのように処理しても、Webアプリが機能することを確認する必要があります:-)リクエストを再送信しますか?新しいリクエストは古いリクエストと同じですか、それとも何か違いがありますか?ブラウザはユーザーに再POSTの確認を求めますか?ページのどの要素が再要求され、何がキャッシュから読み込まれますか?ブラウザは私のキャッシュ制御ヘッダーを尊重しますか?

これらの質問への回答は、メーカー、ブラウザのバージョン、およびユーザー設定によって異なります。これらすべてがそれほど重要ではないようにソフトウェアを設計します。

あまり直接的な答えではないことをお詫びしますが、ここにはすでにいくつかの正解があります。


悲しいかな、私も含めて、ほとんどの開発者を夢中にさせる何か、戻るボタンの考えられるすべての影響を考慮に入れています。
ルイーズ

0

ブラウザは常にページを記憶するために保存し、戻るボタンを押しても前のページのリクエストをサーバーに送信せず、代わりにページを保存したキャッシュを確認し、LIFOルールに従います。最後に開いた戻るボタンを押して、最初にそのページを教えてください


2
いいえ、それは機能しません!キャッシュが無効になると、サーバーにリクエストを返送して、ページを再度取得します。
Pierre Thibault 2010

-1

ブラウザは、現在のページの前に最後に表示されたページをロードしてから、発生する可能性のあるリダイレクトに従いますか?

質問のポイントが欠けているようです。


彼らはおそらく戻るボタンを無効にするか、その使用を防ぎたいと思うでしょう。幸運を。
ジョンホーベン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.