PHP:获取 HTTP 协议版本(HTTP/1.1 与 HTTP/2)

Posted

技术标签:

【中文标题】PHP:获取 HTTP 协议版本(HTTP/1.1 与 HTTP/2)【英文标题】:PHP: Get HTTP Protocol Version (HTTP/1.1 vs HTTP/2) 【发布时间】:2016-04-15 13:51:49 【问题描述】:

到目前为止,我的 php 应用程序都假定 HTTP 1.1 无处不在。所以我像这样定义了所有标题:

header("HTTP/1.1 500 Internal Server Error"); 

但现在我的服务器也支持 HTTP 2,我想用正确的 HTTP 状态代码更新所有标头响应。

如何获取 http 请求的 HTTP 协议版本?

(我的网络服务器是 nginx,但我想我使用的是 nginx 还是 apache 无关紧要。)

【问题讨论】:

【参考方案1】:

服务器协议应该可以通过服务器环境中的SERVER_PROTOCOL 获得,通常通过应用程序内部的$_SERVER['SERVER_PROTOCOL'] 公开。

来自 Apache 2.4 下的phpinfo()

SERVER_PROTOCOL => HTTP/1.1

【讨论】:

【参考方案2】:

更改/etc/nginx/factcgi_params:

#fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  SERVER_PROTOCOL    HTTP/2.0;

标题应该是:-

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

【讨论】:

仅供参考,在“404”之前缺少一个空格。

以上是关于PHP:获取 HTTP 协议版本(HTTP/1.1 与 HTTP/2)的主要内容,如果未能解决你的问题,请参考以下文章

http协议

详解HTTP协议版本(HTTP/1.01.12.03.0区别)

详解HTTP协议版本(HTTP/1.01.12.03.0区别)

HTTP/0.9HTTP/1.0HTTP/1.1HTTP/2HTTP/3各版本之间的区别?

HTTP协议

HTTP 协议的前世今生HTTP 1.0HTTP 1.1 和 HTTP 2.0