Что происходит, когда вы возвращаетесь в браузер?
Когда я нажимаю кнопку <== back
в браузере, что происходит?
- Повторяется ли запрос с тем же URL-адресом?
- Сохранено и восстановлено текущее состояние DOM? (Только HTML)
- Сохраняется и восстанавливается текущее состояние страницы? (HTML + Javascript)
- Сервер запрашивает, но если отправляет
unchanged
, то используется локальный кеш?
- В целом, можем ли мы считать, что у нас есть актуальная информация на предыдущей странице?
Я не понимаю, из-за этих ситуаций:
- Stackoverflow иногда обрабатывает мои upvotes очень плохо (не отображая его, не позволяя мне отменить, потому что я последний проголосовал 5 минут назад, но он был на другой вкладке и т.д.).
- Когда я работаю над локальной средой, я не чувствую, что многое спрашивает, а затем
- Я всегда очень не уверен, что произойдет, когда вернусь, следовательно, как разработчик, избегайте использовать его как можно больше (только чтобы найти URL-адрес в истории на самом деле)
Мое мнение таково, что повторение запроса было бы лучшей идеей, но это не самый быстрый, и браузер может захотеть быть быстрым в этом случае (чтобы произвести впечатление на пользователя)... С другой стороны, сохранение состояний страницы должно стоить много памяти...
Ответы
Ответ 1
Это зависит.
Это зависит от метода HTTP-запроса. Если страница была GET, браузер может решить ее кешировать, а не повторно запрашивать. POST и другие методы HTTP не кэшируются, так как они могут иметь побочные эффекты на стороне сервера. Вот почему вы даже получаете диалоговое окно с предупреждением, если вернуться к странице, загруженной запросом POST.
Это зависит от заголовков кеширования. (см. здесь) Страницы, которые явно разрешены для кэширования, как описано в их заголовок может быть повторно использован при навигации обратно.
Это зависит от браузера. Некоторые из них оптимизированы для удобства пользователей (больше кеширования, большей скорости, большей стабильности). Где другие проще и просто перепросят страницу.
Это зависит от использования памяти, особенно на мобильных устройствах. Браузер может решить не сохранять содержимое страницы и указывать, является ли эта страница большой или нет доступной памяти.
Браузеры - это сложные части программного обеспечения, а умные люди работают над их оптимизацией в течение очень долгого времени.
Насколько уровень кэширования используется для обратной навигации, я думаю, что есть три основных уровня
(это, вероятно, чрезмерное применение, но это даст вам общую идею.)
- Uncached. Страница запрашивается повторно.
- Кэшированные активы. Содержимое и активы кэшируются, поскольку они поступают с сервера. Это, вероятно, не требует памяти, просто дискового пространства, так как это, вероятно, не очень много данных.
- Состояние кеширования. Состояние DOM, куча JS, значения полей формы, все сохраненные в памяти. Это, вероятно, требует большой памяти и, вероятно, не записывается на диск, так как в зависимости от страницы может быть много мегабайт.
Ответ 2
Спецификация агентов (включая браузеры) на сайте W3C:
http://www.w3.org/TR/2014/WD-UAAG20-Reference-20140925/#sc_315
Это также полезно для пользователей, для которых навигация занимает много времени, утомительным или болезненным, потому что это позволяет им избежать необходимости повторно вводить длинные URL-адреса. Функция "Назад" является частью пользовательского интерфейса UA отображаемого содержимого.
Возможная интерпретация может быть: "Вернитесь, но не потеряйте данные!" каждый браузер определяет свою собственную кнопку возврата.