我可以退货吗;HTTP/1.1“;使用HTTP/2时的协议版本?

我可以退货吗;HTTP/1.1“;使用HTTP/2时的协议版本?,http,http2,Http,Http2,在我的项目中,我有一些硬编码的HTTP状态代码和描述,例如: $this->output->set_header("HTTP/1.1 422 Unprocessable entity"); 我不清楚,因为HTTP/2服务器看起来不再返回完整的头行(协议、状态代码和状态描述)。例如: HTTP/1.1 200 OK Content-Type: image/jpeg Content-Length: 123 将成为: HEADERS + END_STREAM + END_HEA

在我的项目中,我有一些硬编码的HTTP状态代码和描述,例如:

$this->output->set_header("HTTP/1.1 422 Unprocessable entity");
我不清楚,因为HTTP/2服务器看起来不再返回完整的头行(协议、状态代码和状态描述)。例如:

HTTP/1.1 200 OK
Content-Type: image/jpeg
Content-Length: 123
将成为:

HEADERS
  + END_STREAM
  + END_HEADERS
:status = 200
content-type = image/jpeg
content-length = 123
当使用my时,浏览器看起来不会被以“HTTP/1.1”开头的响应所困扰


因此,我想知道是否迫切需要依赖框架来返回正确的状态代码(框架构建一个以$\u SERVER['SERVER\u PROTOCOL']开头的字符串)。请参见此以了解实现。或者,如果没有关系。

正如您所说,HTTP/2协议中没有文本状态行,它可以用来传输包含“HTTP/1.1”的字符串。HTTP/2仅以数字形式传输伪头值
:status
中的状态代码,该值将由客户端拾取

所以,主要的问题是,当你打电话时,你选择的框架在做什么

$this->output->set_header("HTTP/1.1 422 Unprocessable entity");
如果框架在HTTP/2情况下解析这一行,只提取
422
,并将其放入
:status
伪头中,那么一切都正常。如果它不解析它,那么我不知道它将如何设置状态代码。您的框架/Web服务器也不能将此字符串用作普通头,因为您在此处设置的只是一个字符串值。设置普通标头需要标头的名称和值。所以我猜你的框架只是删除了不相关的数据,一切都很好


如果您感兴趣,可以使用
nghttp2
commandline工具
nghttp
调试连接。做一个类似于
nghttp-v的调用https://your-host
,它将调试打印您收到的所有标题值,包括伪标题。

正如您所说,HTTP/2协议中没有文本状态行,可用于传输包含“HTTP/1.1”的字符串。HTTP/2仅以数字形式传输伪头值
:status
中的状态代码,该值将由客户端拾取

所以,主要的问题是,当你打电话时,你选择的框架在做什么

$this->output->set_header("HTTP/1.1 422 Unprocessable entity");
如果框架在HTTP/2情况下解析这一行,只提取
422
,并将其放入
:status
伪头中,那么一切都正常。如果它不解析它,那么我不知道它将如何设置状态代码。您的框架/Web服务器也不能将此字符串用作普通头,因为您在此处设置的只是一个字符串值。设置普通标头需要标头的名称和值。所以我猜你的框架只是删除了不相关的数据,一切都很好

如果您感兴趣,可以使用
nghttp2
commandline工具
nghttp
调试连接。做一个类似于
nghttp-v的调用https://your-host
,它将调试打印您收到的所有标题值,包括伪标题