PHP标题('Location:'。$ url)http1.0 vs http1.1 vs?

时间:2011-04-16 16:09:21

标签: php redirect http-status-codes

我正在使用PHP进行一些重定向,例如:

header('Location: '.$url);

但现在我需要使用其他一些状态代码进行重定向。

我应该http1.0或http1.1。或者我们已经在http2.0或更高版本?

两者的状态代码是否相同?

因此,假设我想使用状态码404(未找到)重定向​​。

我可以这样做:

header('HTTP/1.1 404 Not Found');
header('Location: '.$url);

或者是否有:

header('HTTP/2.0 404 Not Found');
header('Location: '.$url);

5 个答案:

答案 0 :(得分:5)

一般来说,浏览器使用HTTP 1.1 (HTTP 1.0已经很老了;并且不支持现在非常需要的几个有趣的功能)

HTTP 2.0?没有这样的东西; - )


不要犹豫,看看Hypertext Transfer Protocol - 通过RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1可能是一个好主意。

是的,这可能需要一些时间来阅读 - 但如果你每天都在使用HTTP工作,那么了解它可能是一个好主意; - )

答案 1 :(得分:3)

没有HTTP / 2.0; HTTP / 1.1是最新版本。

您可以使用$_SERVER['SERVER_PROTOCOL']的值来响应相同的协议版本:

header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found');

此时您应该知道,如果响应是HTTP / 1.0,HTTP / 1.1标头字段可能会被忽略。

顺便说一句:仅为状态代码201和3xx定义Location header field

  

对于201(已创建)响应,Location是请求创建的新资源的位置。对于3xx响应,位置应该应该指示服务器自动重定向到资源的首选URI。

答案 2 :(得分:2)

请参阅third parameter to header()以发送特定的状态代码:

  

http_response_code

     

强制HTTP响应代码为指定值。请注意,如果字符串不为空,则此参数仅起作用。

答案 3 :(得分:2)

如果您发送HTTP/1.0HTTP/1.1,由您自己决定,因为您的目的没有任何改变。

答案 4 :(得分:2)

使用HTTP/1.1。目前称为HTTPbis的下一版HTTP将只是一个更新,仍称为HTTP / 1.1。

Location:标头独立于协议版本工作。请注意,并非所有Status:数字都允许这些数字。只有200-400的范围才能使用它。对于500个错误,肯定会被忽略。