【问题标题】:Why do browsers not keep status 302 pages in back-button history?为什么浏览器不在后退按钮历史记录中保留状态 302 页面?
【发布时间】:2020-07-18 20:17:05
【问题描述】:

当对 HTML 页面的请求响应 HTTP 302 Found(又名“临时重定向”)时,FireFox 会“就地”加载重定向页面,而不会将最初打开的 URL U 保留在“后退按钮历史记录”中。

302 的一个流行用法(我认为代码的正确用法)似乎是重定向到 /cookieAbsent 页面,提醒用户他们的浏览器不“支持”(也许更有可能用户已禁用) cookie。

这种浏览器行为的后果是,如果用户决定启用 cookie,则重新加载当然只是重新加载 (the server couldn't send you back, reliably, if it wanted to) /cookieAbsent,这不好,并且后退按钮会回到之前的位置打开(通过超链接或键入)原始U。对于301 Moved Permanently(又名“永久重定向”),这对我来说是有意义的,但对于302 来说似乎是不可取的,尤其是像这样使用时。

如果我正在实现一个浏览器 - 或者,也许,希望报告现有浏览器中的错误或功能请求 - 这种行为是通用规范所要求的,还是只是由浏览器来做它认为合适的事情?

【问题讨论】:

  • 我不知道这是否是原因,但 302 大多已被弃用,取而代之的是 307。
  • "307和302唯一的区别是307保证重定向请求时方法和body不会改变。302是一些老客户端错误地把方法改成GET :非 GET 方法和 302 的行为在 Web 上是不可预测的,而 307 的行为是可预测的。对于 GET 请求,它们的行为是相同的。 MDN

标签: browser http-status-code-302


【解决方案1】:

这是因为浏览器历史记录不(必须)符合缓存语义。

历史记录(后退按钮)的目标是向用户展示在浏览器之前获得的(可能已过期的)响应下他们将获得的页面。

更详细的解释可以看:https://svn.tools.ietf.org/svn/wg/httpbis/draft-ietf-httpbis/latest/p6-cache.html#history.lists

【讨论】:

    【解决方案2】:

    You can find this very relevant bug from 20 years ago (!) on mozilla bugtracker

    理由的简短摘要似乎是他们这样做是因为某些网站显然使用 302 错误的方式作为重定向路径

    /product?limitedtimetoken 
    302 to 
    /product?superproduct 
    302 to 
    /superproduct 
    

    有些人习惯了不保存的“错误”行为并将其用于假装安全

    /checkauth 
    302 to 
    /connected?gotoaccount 
    302 to 
    /account
    

    虽然将这些保存在历史记录中是“技术上正确的”,但最终用户保存所有这些中等 URL 只是错误的行为,因为这些都是假的 302,在现实中总是会重定向。

    如果您曾经遇到过“我的浏览器的后退按钮不起作用,它总是向后退”的情况,您有时会发现他们的推理很容易理解。

    他们提到这也是 IE 和 Netscape 所做的,虽然我找不到这些原因(但我认为这几乎是相同的:最终用户将所有内容保存在历史中会很糟糕) .

    顺便说一句,撤消“此更改”是没有意义的-此更改是正确的 修复..你是对的,有问题的网站做错了,但我们 应该还在解决这个问题。

    此补丁使 mozilla 的行为与 Netscape 4x 和 IE w.r.t 相同。存储 重定向全局历史中的 url。重要的是我们还实施 这种行为是因为(不幸的是)许多网站都依赖它而成长 为了某种程度的安全感。这个事实是不可能的 一夜之间改变,不妥协也不利于Mozilla的声誉 关于这个问题。

    【讨论】:

    • 谢谢!那真不幸! (我不明白帖子“有问题的网站做错了,但我们仍然应该解决这个问题”。对我来说,这似乎不是问题,除了想要放置的未命名网站查询参数中的秘密数据!)
    【解决方案3】:

    假设 URL $u$ 重定向到 URL $v$。还假设 $u$ 被推送到历史记录,然后 $v$ 被推送到历史记录。当用户单击后退按钮时,用户将被带到 $u$,而 $u$ 将重定向到 $v$。用户会发现自己处于无限循环中,使后退按钮无用。

    【讨论】:

      猜你喜欢
      • 2018-10-02
      • 2015-05-18
      • 2013-06-23
      • 2023-04-07
      • 2012-02-19
      • 2023-04-08
      • 1970-01-01
      • 2021-10-27
      • 1970-01-01
      相关资源
      最近更新 更多