多年前,我一直在努力解决我认为是浏览器错误的问题,因为包含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被禁用,也会起作用。
我强烈建议尽可能使用头重定向,这是一个更好的用户体验