HTTP HEAD的PHP代码段:
$context = stream_context_create (
Array
(
'http' => Array ('method' => 'HEAD')
));
$fd = fopen ("http://google.com", 'rb', false, $context);
print_r (stream_get_meta_data ($fd));
我对状态代码感兴趣。以下是
的结果Array
(
[wrapper_data] => Array
(
[0] => HTTP/1.0 302 Found
[1] => Cache-Control: private
[2] => Content-Type: text/html; charset=UTF-8
[3] => Location: http://www.google.co.uk/?gfe_rd=cr&ei=jsMQWK3GAarA8gfKnbGQAg
[4] => Content-Length: 261
[5] => Date: Wed, 26 Oct 2016 14:54:06 GMT
[6] => HTTP/1.0 200 OK
[7] => Date: Wed, 26 Oct 2016 14:54:06 GMT
[8] => Expires: -1
[9] => Cache-Control: private, max-age=0
[10] => Content-Type: text/html; charset=ISO-8859-1
[11] => P3P: CP="This is not a P3P policy! See https://www.google.com/support/accounts/answer/151657?hl=en for more info."
[12] => Server: gws
[13] => X-XSS-Protection: 1; mode=block
[14] => X-Frame-Options: SAMEORIGIN
[15] => Set-Cookie: NID=89=Mmm0qhGNf70J0iWVbQO_whrKBG3-RNGXpkKBm9DorsWkEzMMXQfZ5qC9s5MhVwHrRXYPFmi6Q_5B0h1au7zLKDwBmgtmTPzljoQcG_jm7qqupQjR6YO38TXmnTQMNskH; expires=Thu, 27-Apr-2017 14:54:06 GMT; path=/; domain=.google.co.uk; HttpOnly
[16] => Accept-Ranges: none
[17] => Vary: Accept-Encoding
)
[wrapper_type] => http
[stream_type] => tcp_socket/ssl
[mode] => rb
[unread_bytes] => 0
[seekable] =>
[uri] => http://google.com
[timed_out] =>
[blocked] => 1
[eof] =>
)
请注意以下事项:
wrapper_data[0] => HTTP/1.0 302 Found
wrapper_data[3] => Location: http://www.google.co.uk/?gfe_rd=cr&ei=jsMQWK3GAarA8gfKnbGQAg
wrapper_data[6] => HTTP/1.0 200 OK
一般来说,确定有效(用户将在浏览器中看到的内容)HTTP状态代码的正确程序是什么?
我很想简单地选择匹配/^HTTP\/[\d\.]+ (\d+)/
的最后一行,这是一直有用还是天真?
答案 0 :(得分:0)
我找不到关于此的文档,但看起来wrapper_data
数组按顺序填充。
首先,您获得重定向响应(302),然后是实际响应(200)。这意味着您可以从HTTP/
开始的最后一个标题开始阅读。
你肯定没有得到所有这些标题以响应一个请求,而是包装器透明地执行重定向的请求,并将第二个响应的标题附加到第一个响应的标题。
答案 1 :(得分:0)
302的效果是发送了一个新请求,因此在这种情况下确实有两个请求和两个响应。除非第二个请求失败(没有响应),否则第一个状态代码与用户无关。
几乎在所有情况下,将最后收到的响应的状态代码视为相关的响应是安全的(除非调试或跟踪是您之后的事情)。之前的任何状态代码只需要到达最后一个状态代码。
答案 2 :(得分:0)
如果除了最后一个响应之外的所有响应都在100-199范围内(即临时响应集),则唯一一次对单个请求获得超过1个有效响应的时间。例如,一个100继续响应POST,然后是POST本身的实际结果响应。