Я шукав в Інтернеті це питання, але нічого не знайшов:
Яка логіка кнопки «Назад»? Що відбувається, коли ми натискаємо кнопку "Назад" у веб-браузері?
Я б справді хотів більше про це зрозуміти.
Дякую.
Я шукав в Інтернеті це питання, але нічого не знайшов:
Яка логіка кнопки «Назад»? Що відбувається, коли ми натискаємо кнопку "Назад" у веб-браузері?
Я б справді хотів більше про це зрозуміти.
Дякую.
Відповіді:
Ваш веб-браузер зберігає стек (або список, якщо хочете) веб-сторінок, які ви відвідали у цьому вікні. Скажімо, вашою домашньою сторінкою є 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
Щоб повернутися на головну сторінку, використовуючи лише кнопку "Назад", потрібно ще два натискання, повернувшись "назад" до категорії "Обладнання" і, нарешті, до головної сторінки. Для нас, програмістів, це здається настільки очевидним, що відбувається, але це постійно дивує чертовських користувачів, оскільки вони не усвідомлюють, що браузер нічого не знає про ієрархічну структуру веб-сайту, на якому вони трапляються.
Було б чудово, якби браузери дозволили дизайнерам сайтів запрограмувати кнопку Назад робити очевидне (підняти вас на рівень), а не те, що вони роблять зараз?
Редагувати: коментатор запитав, чи браузер перезавантажує сторінку, або просто відображає її з локального кешу.
Відповідь - це залежить. Дизайнери сайтів можуть вказати, чи повинен браузер кешувати сторінку чи ні. Для сторінок, які встановлені як некешовані, браузер перезавантажує сторінку з сервера, коли ви натискаєте Назад, ніби ви вперше її відвідуєте. Для кешованих сторінок браузер відображає його поза кешем, що набагато швидше.
Я люблю вважати це переоформленням мого останнього запиту. Якби ви виконали простий 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)
Як devoloper, ви повинні переконатися, що ваш веб-додаток працює незалежно від того, як браузер обробляє кнопку Назад :-) Чи повторно надсилає запит? Чи новий ідентичний запит ідентичний старому, чи він чимсь відрізняється? Чи попросить браузер підтвердити повторний POST? Які елементи сторінки будуть повторно запитуватися, а які завантажуватися з кешу? Чи буде браузер поважати мої заголовки кеш-контролю?
Відповіді на це запитання залежать від виробника, версії браузера та налаштувань користувача. Сконструюйте своє програмне забезпечення так, щоб все це не мало такого великого значення.
Вибачте за не дуже пряму відповідь, але тут вже є кілька прямих відповідей.
браузер завжди зберігав сторінки для запам'ятовування, і коли ми натискаємо кнопку "Назад", він не надсилає запит на сервер попередньої сторінки, замість цього він просто бачить свій кеш, де він зберігав сторінки, і він дотримується правила LIFO, тому він дайте нам цю сторінку спочатку при натисканні кнопки "Назад", яку ми відкрили останньої
Браузер завантажує останню переглянуту сторінку перед поточною, а потім слідує за будь-яким переспрямуванням, яке може статися?
Здається, мені не вистачає суті питання.