使用HTTP/2时可以return"HTTP/1.1"协议版本吗?
Can I return "HTTP/1.1" protocol version when using HTTP/2?
在我的项目中,我有一些硬编码的 HTTP 状态代码和描述,例如:
$this->output->set_header("HTTP/1.1 422 Unprocessable entity");
而且我不清楚 Section 8.1.3 of HTTP/2 specs 因为它看起来 HTTP/2 服务器不再 return 完整的 header 行(协议,状态代码, 和状态描述)。例如:
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
使用我的 demo 时,浏览器似乎不会被以 "HTTP/1.1" 开头的响应所打扰。
所以我想知道是否迫切需要依赖框架来returning一个适当的状态代码(框架构建一个以$_SERVER['SERVER_PROTOCOL']开头的字符串)。请参阅此 以了解实施。或者如果没关系。
正如您所说,HTTP/2 协议中没有文本状态行,可用于传输包含 "HTTP/1.1" 的字符串。 HTTP/2 仅在伪header 值 :status
中以数字形式传输状态代码,客户端将拾取该值。
所以主要问题是当你调用
时你选择的框架在做什么
$this->output->set_header("HTTP/1.1 422 Unprocessable entity");
如果框架在 HTTP/2 的情况下解析这一行,只提取 422
并将其放入 :status
伪 header 那么一切都很好。如果它不解析它,那么我不知道它如何能够设置状态代码。您的 framework/webserver 也不能将此字符串用作普通的 header - 因为您在此处设置的只是一个字符串值。设置正常的 header 将需要 header 的名称和值。所以我猜你的框架只是删除了不相关的数据,一切都很好。
如果您有兴趣,可以使用 nghttp2
命令行工具 nghttp
来调试连接。拨打 nghttp -v https://your-host
这样的电话,它将 debug-print 你们都收到 header 值,包括 pseudo-headers.
在我的项目中,我有一些硬编码的 HTTP 状态代码和描述,例如:
$this->output->set_header("HTTP/1.1 422 Unprocessable entity");
而且我不清楚 Section 8.1.3 of HTTP/2 specs 因为它看起来 HTTP/2 服务器不再 return 完整的 header 行(协议,状态代码, 和状态描述)。例如:
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
使用我的 demo 时,浏览器似乎不会被以 "HTTP/1.1" 开头的响应所打扰。
所以我想知道是否迫切需要依赖框架来returning一个适当的状态代码(框架构建一个以$_SERVER['SERVER_PROTOCOL']开头的字符串)。请参阅此
正如您所说,HTTP/2 协议中没有文本状态行,可用于传输包含 "HTTP/1.1" 的字符串。 HTTP/2 仅在伪header 值 :status
中以数字形式传输状态代码,客户端将拾取该值。
所以主要问题是当你调用
时你选择的框架在做什么$this->output->set_header("HTTP/1.1 422 Unprocessable entity");
如果框架在 HTTP/2 的情况下解析这一行,只提取 422
并将其放入 :status
伪 header 那么一切都很好。如果它不解析它,那么我不知道它如何能够设置状态代码。您的 framework/webserver 也不能将此字符串用作普通的 header - 因为您在此处设置的只是一个字符串值。设置正常的 header 将需要 header 的名称和值。所以我猜你的框架只是删除了不相关的数据,一切都很好。
如果您有兴趣,可以使用 nghttp2
命令行工具 nghttp
来调试连接。拨打 nghttp -v https://your-host
这样的电话,它将 debug-print 你们都收到 header 值,包括 pseudo-headers.