我可以退货吗;HTTP/1.1“;使用HTTP/2时的协议版本?
在我的项目中,我有一些硬编码的HTTP状态代码和描述,例如:我可以退货吗;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
$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
,它将调试打印您收到的所有标题值,包括伪标题