Подтвердить что ты не робот

Как работает кнопка "Назад" в веб-браузере?

Я искал в Интернете об этом вопросе, но ничего не нашел:

Какова логика кнопки "Назад"? Что происходит, когда мы нажимаем кнопку "Назад" в веб-браузере?

Я действительно хотел бы узнать больше об этом.

Спасибо.

4b9b3361

Ответ 1

Ваш веб-браузер хранит стек (или список, если хотите) веб-страниц, которые вы посетили в этом окне. Скажем, ваша домашняя страница - 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). Вы можете использовать панировочные сухари, но на этот раз вы нажмете кнопку "Назад" - кажется очевидным, что он должен подняться на один уровень, не так ли? Но где он вас принимает?

Первоначально он запутывает многих пользователей (включая меня, когда я это делаю), что он "понижает" уровень, возвращается в категорию "Память". Если посмотреть на список страниц, легко понять, почему:

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

Чтобы вернуться на главную страницу, используя только кнопку "Назад" , потребуется еще два нажатия, отведя вас "назад" к категории "Оборудование" и, наконец, на главную страницу. Нам кажется настолько очевидным для нас, программистов, что происходит, но это постоянно удивляет всех постоянных пользователей, потому что они не понимают, что браузер ничего не знает об иерархической структуре любого веб-сайта, на котором они находятся.

Было бы здорово, если бы браузеры позволяли дизайнерам сайтов обращать внимание на кнопку "Назад" , чтобы сделать очевидную вещь (подняв уровень), а не то, что она делает сейчас?

Изменить: комментатор спросил, перезагружает ли браузер страницу или просто отображает ее из своего локального кеша.

Ответ зависит от этого. Дизайнеры сайтов могут указать, должен ли браузер кэшировать страницу или нет. Для страниц, которые установлены как не кэшированные, браузер перезагружает страницу с сервера, когда вы нажимаете Назад, как если бы вы впервые посетили его. Для кэшированных страниц браузер отображает его из кеша, что намного быстрее.

Ответ 2

Мне нравится думать об этом как о повторной выдаче моего последнего запроса. Если вы выполнили простой GET, это, вероятно, вернет ту же самую вещь, что и в прошлый раз (минус динамический контент). Если вы сделали POST, вы повторно отправьте форму (после подтверждения) на сервер.

Ответ 3

Основная идея - вернуться к последней странице или разделу логического сайта.

Глядя на Gmail, вы увидите, выполнили ли вы поиск и нажмите сообщение, а затем нажмите кнопку "Назад", и вы вернетесь к поиску, который вы сделали.

Когда вы нажмете его в большинстве браузеров, он либо отправит последний HTTP-запрос, либо загрузит кеш, если браузер кэширует сайты.

Ответ 4

Я думаю, что самый простой способ объяснить это в псевдокоде:

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)

Ответ 5

История просматриваемых страниц хранится в виде стека. Когда вы "набираете" верхние три страницы (например, A, B, C), а затем переходите на другую страницу D, вы не можете снова попасть в B, нажав вперед.

Ответ 6

Как devoloper, вы должны убедиться, что ваш webapp работает независимо от того, как браузер обрабатывает кнопку "Назад":-) Повторно ли он отправляет запрос? Является ли новый запрос идентичным старому, или он отличается каким-либо образом? Будет ли браузер запрашивать у пользователя подтверждение повторного POST? Какие элементы страницы будут повторно запрошены и загружены из кеша? Будет ли браузер уважать мои заголовки управления кешем?

Ответы на этот вопрос зависят от make, версии браузера и пользовательских настроек. Создайте программное обеспечение, чтобы все это не имело большого значения.

Извините за не очень прямой ответ, но здесь есть несколько прямых ответов.

Ответ 7

браузер всегда хранит страницы для запоминания и когда мы нажимаем кнопку "Назад" он не отправляет запрос на сервер для предыдущей страницы, а просто видит его кеш где он хранит страницы и соответствует правилу LIFO, поэтому он дает нам эту страницу в первую очередь при нажатии кнопки "Назад", которую мы открыли в последнем

Ответ 8

Браузер загружает последнюю просматриваемую страницу перед текущей, а затем следует любое перенаправление, которое может произойти?

Кажется, что я не вижу смысла в вопросе.