【问题标题】:Are the situations when header-redirect should be replaced with JS-redirect?是否应该将 header-redirect 替换为 JS-redirect 的情况?
【发布时间】:2015-10-21 07:29:06
【问题描述】:

几年前,我一直在努力解决我认为是浏览器错误的问题,因为包含 multipart/form-data 的帖子上的 header-redirect 工作不够稳定。

按照习惯,我在处理 multipart/form-data 时仍然使用 JS-redirect,而不是 header-redirect。本质上:

echo "<script>document.location = 'receipt.php';</script>";
//instead of
header('Location: receipt.php');

问题:是否(仍然)应该避免标头重定向以支持 JS 重定向(除了特定的功能原因,例如带宽检查等)。

更新 跑到PHP - Set cookie and redirect

set-cookie + redirect http 是否兼容?

还包括: Why can't I set a cookie and redirect?

【问题讨论】:

  • 通常情况下,并非如此。但是,如果已经发送了字节并且您不能再设置标头,这是一个很好的后备。 (通常这不应该发生在生产中) - 但永远不会被替换。一个 JS 错误,JS 已关闭或被阻止 - 您的重定向将无法正常工作。

标签: php redirect


【解决方案1】:

Javascript 重定向在任何方面都不符合 HTTP。任何只理解 HTTP 的客户端都无法遵循它。即使是评估 Javascript 的客户端也会以不同于他们对待 HTTP 3xx 状态的方式对待它。例如,重定向页面将在浏览器历史记录中显示为常规页面,而这可能根本不需要。搜索引擎会将页面视为常规页面而不是插页式页面。此外,301 Moved Permanently 重定向会使用 Javascript 无法复制的特殊规则进行处理。

您唯一一次使用 Javascript 重定向是作为 增强 到常规页面。例如,您返回某种“操作成功!”页面并邀请用户“点击这里返回首页”等;在这样的页面上,几秒钟后自动重定向到主页是有意义的。但这只是一个方便的补充,它不是此页面的主要或唯一功能。

【讨论】:

  • 物联网时代的好答案。
  • 请查看帖子更新。你似乎很了解 http(比我好得多)。
  • 您的问题是重定向上的cookies是否有效?是的。正如您链接到的问题/答案所述:它们没有被正确处理实际上是浏览器的错误,它已被正式归类为此类。
【解决方案2】:

基本上有三种类型的重定向

标头重定向

当您不需要向用户显示任何内容时使用 header-redirect,例如论坛上的成功帖子,您可以将他直接重定向到线程。

请记住,如果没有向客户端发送任何输出,则只能使用 header-redirect,否则它将不起作用。

JS 重定向

如果您想向用户显示某些内容,请使用 js-redirect,例如

您的请求已发送,您将在 3 秒后被重定向

在这种情况下,您的代码应如下所示:

<script>
    setTimeout(function(){
                  document.location = 'receipt.php';
               }, 3000);
</script

另外,如果你无法控制之前的代码,你可以使用 JS-redirect,所以你不能使用 header-redirect。

JS-redirect 将在浏览器历史中显示该站点

请记住,如果用户 禁用 javascript,JS 重定向将不起作用。

HTML 重定向

重定向的第三个选项是通过 html-meta-tag:

<meta http-equiv="refresh" content="3; URL=receipt.php">

这将在 3 秒后重定向,并且在禁用 javascript 时也可以工作。

我强烈建议尽可能使用标头重定向,这是一种更好的用户体验

【讨论】:

    猜你喜欢
    • 2014-03-03
    • 2020-07-29
    • 2019-11-09
    • 2010-12-06
    • 2012-02-11
    • 2011-07-25
    • 2016-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多