多年前,由于包含multipart / form-data的帖子上的标题重定向功能不够稳定,我对我认为是浏览器错误感到困惑。
习惯上,我在处理multipart / form-data而不是header-redirect时仍然使用JS-redirect。实质上:
echo "<script>document.location = 'receipt.php';</script>";
//instead of
header('Location: receipt.php');
问题:是否存在(仍然)应避免使用标头重定向以支持JS重定向的情况(除了特定的功能原因,如带宽检查等)。
更新
进入int
attribute
set-cookie +重定向是否符合http?
答案 0 :(得分:1)
基本上有三种类型的重定向
标题-重定向强>
当您不需要向用户显示任何内容时使用标题重定向,例如在论坛上成功发布帖子,您可以将其直接重定向到该主题。
请记住,如果尚未向客户端发送任何输出,则只能使用标题重定向,否则它将无效。
<强> JS-重定向强>
如果要向用户显示内容,请使用js-redirect,例如
您的请求已被发送,您将在3秒内重定向
在这种情况下,您的代码应如下所示:
<script>
setTimeout(function(){
document.location = 'receipt.php';
}, 3000);
</script
此外,如果您无法控制以前的代码,则可以使用JS重定向,因此您无法使用标头重定向。
JS-redirect将在浏览器历史记录
中显示该网站请注意,如果用户已禁用 javascript,则JS重定向将无效。
<强> HTML-重定向强>
重定向的第三个选项是通过html-meta-tag:
<meta http-equiv="refresh" content="3; URL=receipt.php">
这将在3秒后重定向,如果禁用javascript也会有效。
我强烈建议尽可能使用标题重定向,这是一种更好的用户体验
答案 1 :(得分:1)
Javascript重定向不以任何方式与HTTP兼容。任何只能理解HTTP的客户端都无法遵循它。即使是评估Javascript的客户端也会以不同于处理HTTP 3xx状态的方式对待它。例如,重定向页面将在浏览器的历史记录中显示为常规页面,但这可能根本不需要。搜索引擎会将页面视为常规页面而非插页式广告。此外,301 Moved Permanently重定向由特殊规则处理,Javascript无法复制。
您使用Javascript重定向的唯一时间是扩充到常规页面。例如,你返回某种“行动成功!”页面并邀请用户“点击此处返回主页”等;在这样的页面上,几秒钟后自动重定向到主页是有意义的。但这只是一个方便的补充,它不是这个页面的主要或唯一的东西。