get_headers没有关注重定向 - 为什么不呢?

时间:2016-01-14 19:58:09

标签: php http-headers

我需要在遵循所有重定向后从网站检索最终标头集。根据{{​​3}}中的评论,get_headers应该遵循重定向。但是,我在phpfiddle.org和我自己的服务器上使用url" PHP documentation"进行了测试。 (PHP 5.x)

$r = get_headers('http://microsoft.com', 0);
    var_dump($r);

结果:

array(18) {
  [0]=>
  string(30) "HTTP/1.1 301 Moved Permanently"
  [1]=>
  string(38) "Content-Type: text/html; charset=UTF-8"
  [2]=>
  string(35) "Location: http://www.microsoft.com/"
  [3]=>
  string(25) "Server: Microsoft-IIS/8.5"
  [4]=>
  string(21) "X-Powered-By: ASP.NET"
  [5]=>
  string(35) "Date: Thu, 14 Jan 2016 19:55:58 GMT"
  [6]=>
  string(17) "Connection: close"
  [7]=>
  string(19) "Content-Length: 148"
  [8]=>
  string(15) "HTTP/1.0 200 OK"
  [9]=>
  string(14) "Server: Apache"
  [10]=>
  string(51) "ETag: "6082151bd56ea922e1357f5896a90d0a:1425454794""
  [11]=>
  string(44) "Last-Modified: Wed, 04 Mar 2015 07:39:54 GMT"
  [12]=>
  string(20) "Accept-Ranges: bytes"
  [13]=>
  string(20) "Content-Length: 1020"
  [14]=>
  string(23) "Content-Type: text/html"
  [15]=>
  string(35) "Date: Thu, 14 Jan 2016 19:55:59 GMT"
  [16]=>
  string(17) "Connection: close"
  [17]=>
  string(6) "X-N: S"
}

知道为什么这不起作用,以及如何使其发挥作用?

我知道它没有完全遵循重定向,因为如果您输入网址:http://microsoft.com,则最终会显示http://microsoft.com。并且您可以看到标题不包含重定向到此处。

我需要这个工作的原因:我需要确定最终页面是否设置了X-Frame-Options标头。 http://www.microsoft.com/en-ushttp://microsoft.com页面都没有此标头,但http://www.microsoft.com/页面会返回X-Frame-Options标头,从而阻止在iframe中加载页面。

我需要通过检查此标头来确定是否可以在iframe中加载相关页面,如果没有,我需要将用户重定向到目标,而不是在iframe中显示该页面。

由于

1 个答案:

答案 0 :(得分:2)

#8c9eff 确实遵循重定向。仔细检查转储标头时,您会注意到该数组包含两个响应标头集:

这是第一个:

get_header

第二个:

array(18) {
  [0]=>
  string(30) "HTTP/1.1 301 Moved Permanently"
  [1]=>
  string(38) "Content-Type: text/html; charset=UTF-8"
  [2]=>
  string(35) "Location: http://www.microsoft.com/"
  [3]=>
  string(25) "Server: Microsoft-IIS/8.5"
  [4]=>
  string(21) "X-Powered-By: ASP.NET"
  [5]=>
  string(35) "Date: Thu, 14 Jan 2016 19:55:58 GMT"
  [6]=>
  string(17) "Connection: close"
  [7]=>
  string(19) "Content-Length: 148"

http://www.microsoft.comhttp://www.microsoft.com/en-us的最终重定向可能是特定于语言的,并且取决于 [8]=> string(15) "HTTP/1.0 200 OK" [9]=> string(14) "Server: Apache" [10]=> string(51) "ETag: "6082151bd56ea922e1357f5896a90d0a:1425454794"" [11]=> string(44) "Last-Modified: Wed, 04 Mar 2015 07:39:54 GMT" [12]=> string(20) "Accept-Ranges: bytes" [13]=> string(20) "Content-Length: 1020" [14]=> string(23) "Content-Type: text/html" [15]=> string(35) "Date: Thu, 14 Jan 2016 19:55:59 GMT" [16]=> string(17) "Connection: close" [17]=> string(6) "X-N: S" } 请求标头(当我在浏览器中打开相同的网址时,我最终会在{{ 3}})。