Як працює кнопка Назад у веб-браузері?


84

Я шукав в Інтернеті це питання, але нічого не знайшов:

Яка логіка кнопки «Назад»? Що відбувається, коли ми натискаємо кнопку "Назад" у веб-браузері?

Я б справді хотів більше про це зрозуміти.

Дякую.


14
Повторно надсилає запит чи завантажує сторінку з локального кешу? Чи отримують файли cookie, створені в першій відповіді, при зворотному ударі? тощо
Джиммі

Відповіді:


99

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

Щоб повернутися на головну сторінку, використовуючи лише кнопку "Назад", потрібно ще два натискання, повернувшись "назад" до категорії "Обладнання" і, нарешті, до головної сторінки. Для нас, програмістів, це здається настільки очевидним, що відбувається, але це постійно дивує чертовських користувачів, оскільки вони не усвідомлюють, що браузер нічого не знає про ієрархічну структуру веб-сайту, на якому вони трапляються.

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

Редагувати: коментатор запитав, чи браузер перезавантажує сторінку, або просто відображає її з локального кешу.

Відповідь - це залежить. Дизайнери сайтів можуть вказати, чи повинен браузер кешувати сторінку чи ні. Для сторінок, які встановлені як некешовані, браузер перезавантажує сторінку з сервера, коли ви натискаєте Назад, ніби ви вперше її відвідуєте. Для кешованих сторінок браузер відображає його поза кешем, що набагато швидше.


5
Коли браузер переглядає кеш, чи перевіряє він термін дії у заголовку відповіді сервера? Припускаю, що якщо термін дії сторінки закінчився, браузер надішле назад той самий запит, ні? Чи обробляються get та post однаково щодо кнопки повернення? Дякуємо за чудову відповідь.
П'єр Тібо

5
Перше запитання: так, це правильно. Якщо термін дії сторінки закінчився, браузер повинен повторно надіслати запит на сторінку, використовуючи ті самі URL-адреси та дані POST. Але для операцій POST більшість браузерів запитують користувача, чи не хочуть вони його повторно відправити. Я припускаю, що повторне надсилання даних POST може призвести до дублікатів проводки, повторення транзакцій тощо. Це запобігає цьому дизайнеру сайту.
Barry Brown

Так, але у випадку POST, я думаю, що браузер запитає лише у випадку POST, термін дії якого минув. Чи правий я? Тому що, коли я займався розробкою на ASP.net, кнопка повернення знову надсилала повідомлення на сервер без запиту.
П'єр Тібо

Можливо, це залежить від браузера. Мій браузер (Safari) завжди запитує - принаймні, я думаю, він завжди запитує.
Barry Brown

Я користувався Safari. Це не завжди запитує. Це повинно слідувати логіці, яку я описав.
П'єр Тібо

5

Я люблю вважати це переоформленням мого останнього запиту. Якби ви виконали простий GET, він, мабуть, повернув те саме, що й минулого разу (за вирахуванням динамічного вмісту). Якщо ви зробили POST, ви збираєтеся повторно надіслати форму (після підтвердження) на сервер.


2

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

Дивлячись на Gmail, ви побачите, чи виконуєте ви пошук та клацаєте повідомлення, а потім натискаєте кнопку "Назад", це поверне вас до попереднього пошуку.

Коли ви натискаєте його в більшості браузерів, він або повторно надсилає останній запит http, або завантажує кеш, якщо браузер кешує сайти.


Коли браузер використовує кеш, а коли повторно надсилає запит?
П'єр Тібо

Це залежить від браузера і від того, що було зроблено до цього моменту. Ви можете встановити, що більшість браузерів не кешують, тому вони завжди перезавантажуватимуться. Існує метатег HTML для кешування, але з урахуванням того, який знаходиться у браузері.
BobBrez

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

Історія переглянутих сторінок зберігається у формі стека. Коли ви "висуваєте" три верхні сторінки (наприклад, A, B, C), а потім переходите на іншу сторінку D, ви не можете знову дістатись до B, натиснувши вперед.


0

Як devoloper, ви повинні переконатися, що ваш веб-додаток працює незалежно від того, як браузер обробляє кнопку Назад :-) Чи повторно надсилає запит? Чи новий ідентичний запит ідентичний старому, чи він чимсь відрізняється? Чи попросить браузер підтвердити повторний POST? Які елементи сторінки будуть повторно запитуватися, а які завантажуватися з кешу? Чи буде браузер поважати мої заголовки кеш-контролю?

Відповіді на це запитання залежать від виробника, версії браузера та налаштувань користувача. Сконструюйте своє програмне забезпечення так, щоб все це не мало такого великого значення.

Вибачте за не дуже пряму відповідь, але тут вже є кілька прямих відповідей.


На жаль, беручи до уваги всі можливі ефекти кнопки "Назад" те, що зводить з розуму більшість розробників, включаючи і мене самого.
Луїза

0

браузер завжди зберігав сторінки для запам'ятовування, і коли ми натискаємо кнопку "Назад", він не надсилає запит на сервер попередньої сторінки, замість цього він просто бачить свій кеш, де він зберігав сторінки, і він дотримується правила LIFO, тому він дайте нам цю сторінку спочатку при натисканні кнопки "Назад", яку ми відкрили останньої


2
Ні, це не працює, нехай це! Якщо кеш вже не дійсний, він надсилає запит назад на сервер, щоб знову отримати сторінку.
П'єр Тібо

-1

Браузер завантажує останню переглянуту сторінку перед поточною, а потім слідує за будь-яким переспрямуванням, яке може статися?

Здається, мені не вистачає суті питання.


Ймовірно, вони хочуть відключити кнопку "Назад" або запобігти її використанню. Удачі.
Джон Говен,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.