Webブラウザの[戻る]ボタンはどのように動作しますか?
-
19-09-2019 - |
質問
私はこの質問について、Webを検索するが、私は何も見つかりませんでした。
バックボタンのロジックとは何ですか?我々は、Webブラウザの[戻る]ボタンを打ったときに何が起こっているのでしょうか?
私は本当にそれについての詳細を理解したいと思います。
ありがとうございます。
解決
Webブラウザを使用すると、そのウィンドウに訪問したWebページのスタックを保持します。 youtube.com、yahoo.com、およびcnn.com:のは、あなたのホームページはgoogle.comで言うと、そこからあなたは、いくつかの他のウェブサイトを訪問してみましょう。最後の1を訪問すると、リストは次のようになります:
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つのプレスを必要とする唯一の[戻る]ボタンを使用して、メインページに戻ります。これは、何が起こっているのか、私たちのプログラマーに非常に明白なようだが、彼らは、ブラウザは、彼らが上であることを起こるものは何でもウェブサイトの階層構造については何も知らないことに気付いていないので、それは、通常のユーザーのうち、すべての時間を一体に驚き。
ブラウザはサイトの設計者は、むしろそれが今ないものは何でもより(レベルあなたを取る)明白なことを行うには、[戻る]ボタンをプログラムしてみましょうかどうは、それは素晴らしいことだ?
編集:コメンターは、ブラウザがページをリロードするか、単にそのローカルキャッシュからそれを表示するかどうかを尋ねた。
。答えは、それが依存しています。サイトの設計者は、ブラウザがページをキャッシュすべきか否かを指定することができます。それはあなたがそれを訪問するのが初めてだったかのように非キャッシュされたように設定されているページの場合、ブラウザは、あなたが戻るを押し、サーバーからページをリロードします。キャッシュされたページの場合、ブラウザがはるかに高速であるキャッシュの外に表示されます。
他のヒント
私は私の最後の要求を再発行すると考えるのが好き。あなたは、単純なGETを実行した場合、それはおそらく、それは最後の時間(マイナス動的なコンテンツを)やった同じものを返します。あなたはPOSTを行っていた場合は、サーバーに(確認後)フォームを再送信しようとしている。
基本的な考え方は、最後のページまたは論理サイト部門に戻すことです。
あなたが検索を実行し、メッセージをクリックした場合、それが戻ってあなたがやった検索に行くことができますバックボタンを押します。
表示されますGmailのを見てみますあなたはほとんどのブラウザでそれをクリックすると、それは最後のHTTPリクエストを再送信するか、またはブラウザがサイトをキャッシュする場合、キャッシュをロードします。
私はこれを説明する最も簡単な方法は、擬似コードであると思います:
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)
閲覧したページの履歴がスタック状に保たれています。あなたはトップの3つのページ(例えばA、B、Cを、)「ポップ」し、別のページDに行くとき、あなたは前方に押すことで、再びBに取得することはできません。
devoloperとして、あなたは、あなたのWebアプリケーションは、ブラウザがそれが要求を再送信してい:-) [戻る]ボタンをどのように処理するかに関係なく、働かないことを確認する必要がありますか?新しい要求は、古いものと同一であるか、それはどのような方法が異なるのでしょうか?ブラウザが再POSTを確認するようユーザーに求めるのだろうか?何ページの要素を再要求されますし、どのようなキャッシュからロードされましたか?ブラウザは、私のキャッシュ制御ヘッダを尊重するのでしょうか?
これらの質問に対する回答は、メイクに依存して、ブラウザとユーザー設定のバージョン。すべてこれはそれほど重要ではありませんようにあなたのソフトウェアを設計します。
非常に直接的ではない答えのための申し訳ありませんが、いくつかのストレート答えはすでにここにあります。
ブラウザは、常に思い出すためのページを保存し、我々は戻るボタンを押したとき それはちょうどそのキャッシュを見る代わりに、前のページのためにサーバーにリクエストを送信しません。 それは、ページを保存し、それが最初に私たちにそのページを与える理由ですLIFOルールに従っています 我々は最後に開いた背中のボタンを押すことで、
ブラウザは現在の1の前に最後に表示したページをロードし、次に起こるかもしれない任意のリダイレクトを次の?
私は一種の質問のポイントを逃しているように見えます。