我正在使用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);
答案 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.0
或HTTP/1.1
,由您自己决定,因为您的目的没有任何改变。
答案 4 :(得分:2)
使用HTTP/1.1
。目前称为HTTPbis的下一版HTTP将只是一个更新,仍称为HTTP / 1.1。
Location:
标头独立于协议版本工作。请注意,并非所有Status:
数字都允许这些数字。只有200-400的范围才能使用它。对于500个错误,肯定会被忽略。