在“Location:”标头中使用协议相对URI

时间:2012-09-15 10:40:35

标签: php http http-headers protocol-relative

我在PHP manual中注明了以下内容:

  

HTTP / 1.1需要绝对URI作为»Location:includes的参数   方案,主机名和绝对路径,但有些客户接受   相对URI。

为了方便用户优先选择HTTPS everywhere,我想改变PHP脚本中的标题:

header("Location: http://www.example.com/");header("Location: //www.example.com/");

我已经测试了上面的代码在我的firefox浏览器上工作,但我不确定这是否是可行的事情。或者我是否应该从$_SERVER变量中提取协议并将其放入。

2 个答案:

答案 0 :(得分:9)

HTTPbis update允许相对URI。虽然没有特别提及,但这包括协议相对URL。

(最重要的是HTTP / 1.1规范的更新,记录了已建立的浏览器行为。)

答案 1 :(得分:2)

根据HTTP protocol的建议,您应该使用绝对URI 。 您仍然可以使用$_SERVER['HTTPS']变量检测协议,条件如下:

$protocol = "http" . (!empty($_SERVER['HTTPS']) ? "s" : "");