Я искал в Интернете этот вопрос, но ничего не нашел:
Какая логика кнопки назад? Что происходит, когда мы нажимаем кнопку «Назад» в веб-браузере?
Я действительно хотел бы больше узнать об этом.
Спасибо.
Я искал в Интернете этот вопрос, но ничего не нашел:
Какая логика кнопки назад? Что происходит, когда мы нажимаем кнопку «Назад» в веб-браузере?
Я действительно хотел бы больше узнать об этом.
Спасибо.
Ответы:
Ваш веб-браузер хранит стек (или список, если хотите) веб-страниц, которые вы посетили в этом окне. Допустим, ваша домашняя страница - 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. Допустим, вы нажимаете Back во второй раз:
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)
Как уполномоченный, вы должны убедиться, что ваше веб-приложение работает независимо от того, как браузер обрабатывает кнопку «Назад» :-) Отправляет ли он запрос повторно? Новый запрос идентичен старому или чем-то отличается? Будет ли браузер запрашивать у пользователя подтверждение повторной POST? Какие элементы страницы будут запрашиваться повторно, а какие загружаться из кеша? Будет ли браузер учитывать мои заголовки управления кешем?
Ответы на эти вопросы зависят от производителя, версии браузера и пользовательских настроек. Создавайте программное обеспечение так, чтобы все это не имело большого значения.
Извините за не очень прямой ответ, но здесь уже есть несколько прямых ответов.
браузер всегда сохранял страницы для запоминания, и когда мы нажимаем кнопку возврата, он не отправляет запрос на сервер для предыдущей страницы, вместо этого он просто видит свой кеш, в котором он хранил страницы, и он следует правилу LIFO, поэтому он дайте нам эту страницу первой, нажав кнопку "Назад", которую мы открыли в последнем
Браузер загружает последнюю просмотренную страницу перед текущей, а затем выполняет любое перенаправление, которое может произойти?
Мне кажется, я упускаю суть вопроса.