Web浏览器中的"后退"按钮如何工作?

Pie*_*ult 79 browser back-button

我在网上搜索了这个问题,但我一无所获:

后退按钮的逻辑是什么?当我们点击Web浏览器上的后退按钮时会发生什么?

我真的想了解更多.

谢谢.

Bar*_*own 94

您的Web浏览器会保留您在该窗口中访问过的网页的堆栈(或列表,如果您愿意).假设您的主页是google.com,并从那里访问其他一些网站:youtube.com,yahoo.com和cnn.com.访问最后一个时,列表如下所示:

google.com -> youtube.com -> yahoo.com -> cnn.com
                                            ^
                                            |
                                       current page
Run Code Online (Sandbox Code Playgroud)

当您按"返回"按钮时,浏览器会将您带回到列表中的上一页,如下所示:

google.com -> youtube.com -> yahoo.com -> cnn.com
                                ^
                                |
                           current page
Run Code Online (Sandbox Code Playgroud)

此时,您可以再次按"返回"将您带到youtube.com,或者您可以按"转发"再次将您转到cnn.com.假设你再次按回来:

google.com -> youtube.com -> yahoo.com -> cnn.com
                   ^
                   |
              current page
Run Code Online (Sandbox Code Playgroud)

如果您现在转到abc.com,列表将更改为如下所示:

google.com -> youtube.com -> abc.com
                               ^
                               |
                          current page
Run Code Online (Sandbox Code Playgroud)

请注意,yahoo.com和cnn.com都已从列表中删除.这是因为你选择了一条新路线.浏览器只保留您访问过的页面列表,以达到您现在所处的位置,而不是您曾经去过的每个页面的历史记录.浏览器也不知道您正在访问的网站的结构,这可能会导致一些令人惊讶的行为.

您在购物网站(ne.com,作为简短示例),其中包含要浏览的产品的类别和子类别.网站设计师在窗口顶部附近仔细提供了面包屑,以便您浏览类别.从网站的首页开始,单击硬件,然后单击内存.该列表现在看起来像这样:

google.com -> ne.com -> ne.com/hw -> ne.com/hw/mem
                                           ^
                                           |
                                      current page
Run Code Online (Sandbox Code Playgroud)

您想要返回硬件类别,因此您使用面包屑来转到父类别而不是使用"后退"按钮.现在浏览器列表如下所示:

google.com -> ne.com -> ne.com/hw -> ne.com/hw/mem -> ne.com/hw
                                                          ^
                                                          |
                                                     current page
Run Code Online (Sandbox Code Playgroud)

根据站点结构,您向后(向上一级),但是由于您单击了一个链接,因此您向前移动了浏览器.无论何时单击链接或在地址栏中输入URL,您都可以继续浏览浏览器,无论该链接是否将您带到您已访问过的页面.

最后,您想要返回主站点页面(ne.com).你可以使用面包屑,但这次你点击后退按钮 - 很明显,它应该会让你上升一级,对吧?但是你需要在哪里?

它最初让许多用户感到困惑(我自己也包括在内,当我碰巧做到这一点时)它会让你"降低"一个级别,回到内存类别.查看页面列表,很容易理解为什么:

google.com -> ne.com -> ne.com/hw -> ne.com/hw/mem -> ne.com/hw
                                            ^
                                            |
                                       current page
Run Code Online (Sandbox Code Playgroud)

要仅使用"返回"按钮返回主页面,则需要再按两次,将您"返回"硬件类别,最后返回主页面.对于我们程序员来说,这似乎是显而易见的,但是它常常让普通用户感到惊讶,因为他们没有意识到浏览器对他们碰巧在哪个网站的层次结构一无所知.

如果浏览器让网站设计师编写Back按钮来执行显而易见的事情(提升你的水平)而不是现在做什么,那会不会很棒?

编辑:评论者询问浏览器是重新加载页面还是仅将其显示在本地缓存中.

答案取决于它.网站设计者可以指定浏览器是否应该缓存页面.对于设置为非缓存的页面,浏览器会在您按Back时从服务器重新加载页面,就好像这是您第一次访问它时一样.对于缓存页面,浏览器将其显示在缓存之外,速度要快得多.

  • 当浏览器查看缓存时,它是否检查服务器响应头中的截止日期?我想如果页面过期,浏览器会发回相同的查询,不是吗?对于后退按钮,get和post是否以相同的方式处理?谢谢你的好回答. (4认同)
  • 第一个问题:是的,这是正确的.如果页面已过期,浏览器应使用相同的URL和POST数据重新请求页面.但对于POST操作,大多数浏览器会询问用户是否要重新发送它.我的猜测是重新发送POST数据可能会导致重复发布,重复交易等.网站设计师可以防止这种情况发生. (4认同)

Joh*_*ven 5

我想把它当作重新发出我的最后一个请求.如果你执行了一个简单的GET,它可能会返回与上次相同的东西(减去动态内容).如果您已完成POST,则表示您要将表单(确认后)重新提交给服务器.