我搜索了关于这个问题的网站,但我什么也没找到:

什么是后退按钮的逻辑?当我们打的Web浏览器的后退按钮发生了什么事?

我真的想了解更多关于这一点。

感谢您。

有帮助吗?

解决方案

您的网页浏览器保持一个堆栈(或列表,如果你愿意),你在该窗口中访问过的网页。比方说,您的主页是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,它可能会返回它最后一次(减去动态内容)做了同样的事情。如果你做了一个帖子,你会重新提交表单(确认后)到服务器。

的基本思想是,返回到最后一页或逻辑站点分裂。

查看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)

的浏览过的网页的历史记录被保持在堆叠状形式。当你“啪”的前三名页(A,B,C,例如),然后去到不同的页面d,你不能去击中再向前B点。

作为devoloper,你应该确保你的web应用程序的工作原理不管浏览器是如何处理后退按钮:-)是否重新发送请求?是新的要求等同于旧,或不以任何方式有什么不同?将浏览器要求用户确认重新发布?哪些页面的元素将被重新请求,什么从缓存中加载?浏览器会尊重我的缓存控制头?

回答这些问题取决于化妆,的一个浏览器和用户设置的版本。设计你的软件,使这一切并不重要了。

对不起,不是很直接的答案,但也有一些直接的答案在这里了。

浏览器总是存储其记忆的网页,如果我们按后退按钮 它不会发送请求到服务器上一个页面,而不是它只是看到它的缓存 它存储的网页,并按照LIFO规则,这就是为什么它给我们的第一页 上推压,我们在最后打开的返回按钮

在浏览器加载上次查看的页面当前的面前,然后遵循可能发生的任何重定向?

我种似乎缺少的问题点。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top