是否应该用JS-redirect替换header-redirect的情况?

时间:2015-10-21 07:29:06

标签: php redirect

多年前,由于包含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?

同样在: PHP - Set cookie and redirect

2 个答案:

答案 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重定向的唯一时间是扩充到常规页面。例如,你返回某种“行动成功!”页面并邀请用户“点击此处返回主页”等;在这样的页面上,几秒钟后自动重定向到主页是有意义的。但这只是一个方便的补充,它不是这个页面的主要或唯一的东西。