在哪些情况下应该用JS-redirect替换header-redirect


Are the situations when header-redirect should be replaced with JS-redirect?

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

习惯上,我在处理多部分/表单数据时仍然使用JS-redirect,而不是header-redirect。从本质上讲:

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

问题:是否(仍然)存在应该避免头重定向而支持js重定向的情况(除了特定的功能原因,如带宽检查等)

运行到PHP -设置cookie和重定向

set-cookie + redirect http是否兼容?

还在:为什么我不能设置一个cookie和重定向?

Javascript重定向在任何方面都不兼容HTTP。任何只理解HTTP的客户端都无法遵循它。即使是评估Javascript的客户端也会将其与HTTP 3xx状态区别对待。例如,重定向页面将在浏览器的历史记录中显示为常规页面,而这可能根本不需要。搜索引擎会将该页面视为普通页面,而不是插页广告。此外,301永久移动重定向会被特殊规则处理,Javascript无法复制这些规则。

使用Javascript重定向的唯一情况是将扩展为到常规页面。例如,你返回某种"操作成功!"页面,并邀请用户"点击这里返回主页"或诸如此类;在这样的页面上,几秒钟后自动重定向到主页是有意义的。但这只是一个方便的补充,它不是这个页面的主要或唯一的功能。

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

Header-Redirect

当你不需要向用户显示任何内容时,使用header-redirect,例如论坛上的成功帖子,在那里你直接将他重定向到主题。

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

JS-Redirect

如果你想要显示一些东西给用户,使用js-redirect,比如

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

在这种情况下,你的代码应该是这样的:
<script>
    setTimeout(function(){
                  document.location = 'receipt.php';
               }, 3000);
</script

另外,如果您无法控制前面的代码,则可以使用JS-redirect,因此您不能使用header-redirect。

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

请记住,如果用户禁用了,则js重定向将不起作用 javascript.

html重定向

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

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

这将在3秒后重定向,如果javascript被禁用,也会起作用。

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