2009-08-21 7 views
70

私はこの質問についてウェブを検索しましたが、何も見つかりませんでした。ウェブブラウザの戻るボタンはどのように機能しますか?

戻るボタンの論理は何ですか? Webブラウザで戻るボタンを押したときに何が起きていますか?

私は本当にそれについてもっと理解したいと思います。

ありがとうございます。

+12

リクエストを再送信するか、ローカルキャッシュからページをロードしますか?最初の応答で作成されたCookieは、ヒットしたときに送信されますか? – Jimmy

答えて

85

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

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

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

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

この時点でもう一度Backを押してyoutube.comに連れて行くことができます。また、Forwardを押すと、cnn.comに再び来ることができます。あなたは今、このように見えるようにリストの変更、abc.com、たとえば、に行けば

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

:両方yahoo.comこと

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

注意とあなたが戻る二度目を押しましょうcnn.comはリストから削除されました。これはあなたが新しい経路をとったからです。ブラウザーはあなたが現在行っているページにアクセスするために訪れたページの一覧のみを保持し、過去に行ったすべてのページの履歴は保持しません。ブラウザは訪問しているサイトの構造についても知らないため、驚くべき動作につながる可能性があります。

あなたはショッピングサイトにいます(ne。com)をブラウズするためのカテゴリとサブカテゴリを持つ短い例として挙げることができます。サイト設計者は、考えられるようにウィンドウの上部近くにbreadcrumbsを提供して、カテゴリをナビゲートすることができます。サイトのトップページからハードウェアをクリックし、次にメモリをクリックします。

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サイトの階層構造についてブラウザーが知らないので、いつものユーザーからはいつも驚いています。

ブラウザがサイト設計者に、今何をするよりも明らかなこと(レベルアップ)を行うために戻るボタンをプログラムできるようになるのは素晴らしいことでしょうか?

編集:コメント作成者は、ブラウザがページを再読み込みするか、単純にローカルキャッシュから表示するかを尋ねました。

答えはそれに依存します。サイト設計者は、ブラウザがページをキャッシュするかどうかを指定できます。キャッシュされていないと設定されているページでは、最初に訪問したときと同じように、Backキーを押すと、サーバーはサーバーからページをリロードします。キャッシュされたページの場合、ブラウザはそれをキャッシュから表示します。これははるかに高速です。

+4

ブラウザがキャッシュを検索しているときに、サーバレスポンスのヘッダーの有効期限をチェックしていますか?私は、ページが期限切れになった場合、ブラウザは同じクエリを返すでしょうか?取得ボタンと投稿ボタンは、同じ方法で処理されますか?あなたの素晴らしい答えをありがとう。 –

+4

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

+0

はい、POSTの場合、ブラウザの有効期限が切れているPOSTの場合にのみ質問すると思います。私は正しい?なぜなら私がASP.netで開発をしていたとき、バックボタンは尋ねることなくサーバーに再びポストしていたからです。 –

2

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

Gmailを見ると、検索を行い、メッセージをクリックした後、戻るボタンを押すと、あなたが行った検索に戻るでしょう。

ほとんどのブラウザでクリックすると、最後のhttp要求が再送信されるか、ブラウザがサイトをキャッシュするとキャッシュがロードされます。

+0

ブラウザはいつキャッシュを使用しますか?リクエストはいつ再送信されますか? –

+0

ブラウザによって異なり、その時点までに何が行われたかによって異なります。大部分のブラウザはキャッシュしないように設定できます。したがって、ブラウザは常にリロードされます。キャッシュのためのHTMLメタタグがありますが、これはブラウザ上のものです。 – BobBrez

-1

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

質問のポイントが分からないようです。

+0

おそらく、戻るボタンを無効にしたり、その使用を妨げたりしたいと考えています。がんばろう。 –

5

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

1

閲覧されたページの履歴はスタック状に保持されます。上位3ページ(A、B、Cなど)を「ポップ」して別のページDに移動すると、前方に向かってBに戻ることはできません。

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) 
0

devoloperとして、ブラウザが「戻る」ボタンをどのように処理しているかにかかわらず、Webアプリケーションが動作することを確認する必要があります:-)リクエストを再送信しますか?新しい要求は古い要求と同じですか、それとも何らかの形で違いますか?ブラウザはユーザーに再POSTを確認するよう求めますか?ページのどの要素が再要求され、どの要素がキャッシュから読み込まれますか?ブラウザは私のキャッシュコントロールヘッダーを尊重しますか?

これらの質問への回答は、メイク、ブラウザのバージョン、およびユーザー設定によって異なります。あなたはソフトウェアを設計してください。これはすべてこれほど重要ではありません。

ご迷惑をおかけしますがご了承ください。

+0

悲しいことに、バックボタンの可能性のあるすべての影響を考慮に入れて、ほとんどの開発者を夢中にさせるものがあります。 – Louise

0

ブラウザでは、覚えておくために常にページが保存されています。また、戻るボタンを押したときには、前のページのサーバーに要求を送信しません。代わりに、キャッシュが表示されます。 そのページを最初に与える理由はLIFOルールです

+2

いいえ、それは動作しません!キャッシュがもはや有効でない場合、キャッシュはページを再び取得するために要求をサーバーに送り返します。 –

関連する問題