【问题标题】:Is header redirect yields different behavior in different browsers标头重定向是否在不同的浏览器中产生不同的行为
【发布时间】:2016-03-27 03:01:46
【问题描述】:

目前,我有一个可以通过以下域访问的脚本

http://me.domain.com/path/index.php

如果满足某些条件,我将通过使用重定向回自己

header('Location: index.php');

重定向后,大部分主流浏览器都会在

http://me.domain.com/path/index.php

还是。但是,对于某些 3rd 第三方供应商的浏览器(用于模拟 sim 卡),它们最终会出现在 (请注意缺少的路径)

http://me.domain.com/index.php

我想知道,这是因为第 3 方供应商没有正确实现他们的浏览器吗?或者,不同的浏览器在处理重定向时产生不同的行为是可以的?

我意识到如果我使用以下代码,

// $_SERVER['PHP_SELF'] is /path/index.php
header('Location: '.$_SERVER['PHP_SELF']);

它适用于所有浏览器,不会丢失路径

【问题讨论】:

    标签: php


    【解决方案1】:

    manual 说:

    大多数当代客户端都接受相对 URI 作为 » 位置:,但一些较旧的客户端需要一个绝对 URI,包括 方案、主机名和绝对路径。你通常可以使用 $_SERVER['HTTP_HOST'], $_SERVER['PHP_SELF'] 和 dirname() 来自相对人的绝对 URI:

    简而言之,总是使用完整的 URI 来覆盖所有情况

    【讨论】:

    • 谢谢@Dagon。我一直认为标头重定向与浏览器无关。现在我知道不是。
    • This answer 对类似问题指出了 RFC 更改,其中相对 URL 在 2014 年 6 月生效。
    • @CheokYanCheng 欢迎您,不要忘记接受答案 :-) .. 每次看到绝对 URI 时,我都会发表评论 - 很多人只是使用相对的,因为它有效用于他们的浏览器测试。
    【解决方案2】:

    The specification (14.30) 表示 Location 标头必须后跟 absolute URI。您正在发送一个相对的,因此它违反了规范,并且两种理解它的方式都同样正确。

    从技术上讲,绝对 URI 还应该有协议和主机名,而不仅仅是路径,所以即使后者效果更好,它仍然是不正确的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-28
      • 1970-01-01
      • 1970-01-01
      • 2020-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多