扫除 PHP get_headers 带来的困扰

前段时间在使用 PHP 中的 get_headers 来获取头信息时,发现其中某个链接会返回多个 Location ,然后就疑惑了,难道 301 重定向这些可以同时多个?按理说只能重定向一次,且前后不能有输出?这到底是怎么一回事呢?

headers

被这个问题困扰了好久,今晚在和NB君聊天时说起这个问题,他的一句话提醒了我,“这应该是 3 个请求结果吧”。

我仔细看了一下,果然,虽然只有 2 个 Location,但有 3 个请求,第 3 个的应答是 200。

我想了下,莫非 PHP 的 get_headers 是一直获取到最终的应答结果而不只是获取第一次请求的结果?

然后做了下验证,果然如此。

文件 a.php

1
2
3
4
5
<?php
# a.php

header("Location:http://localhost/b.php");
?>

文件 b.php

1
2
3
4
5
<?php
# b.php

header("Location:http://cn.bing.com");
?>

文件 c.php

1
2
3
4
5
<?php
# c.php

print_r(get_headers("http://localhost/a.php", 1));
?>

最终访问 c.php 得到的部分结果如下:

1
2
3
4
5
 [Location] => Array
    (
        [0] => http://localhost/b.php
        [2] => http://cn.bing.com
    )

《扫除 PHP get_headers 带来的困扰》有3个想法

  1. 这个主题真简单,有时间我也要弄个超级简单色块版的

评论已关闭。