为什么 http2 使用流而不是请求的优先级?
why http2 use prioritization over stream instead of requests?
“流、连接、消息、框架”的概念构成了http2的主要设计。令我困惑的是流的概念。
起初,流的想法在我看来只是对帧流的虚拟描述。但是后来我发现http2的优先级是针对流而不是messages/requests。为什么会这样,我认为客户端和服务器端的应用程序更关心并直接控制请求或消息,而不是这些消息驻留在哪个流中。
请参考“流优先级”:
https://developers.google.com/web/fundamentals/performance/http2#design_and_technical_goals
HTTP/2中的流对应于构成请求及其相应响应的所有帧,因此自然是处理优先级和流量控制的地方。 “这个请求的响应应该有高优先级”和“这个请求的流和它的响应应该有高优先级”这句话是等价的。
你引用的文档中提到了一个流携带“一个或多个消息”,但我认为那只是该文档中草率的语言。如果您查看 section 8.1 of the spec,它会显示“客户端在新流上发送 HTTP 请求”和“HTTP request/response 交换完全消耗单个流。”
该流中可能还有其他 帧,例如 PUSH_PROMISE,但这些不是实际的请求和响应;服务器推送的响应数据在新流上发送,然后可以赋予不同的优先级。
“流、连接、消息、框架”的概念构成了http2的主要设计。令我困惑的是流的概念。
起初,流的想法在我看来只是对帧流的虚拟描述。但是后来我发现http2的优先级是针对流而不是messages/requests。为什么会这样,我认为客户端和服务器端的应用程序更关心并直接控制请求或消息,而不是这些消息驻留在哪个流中。
请参考“流优先级”: https://developers.google.com/web/fundamentals/performance/http2#design_and_technical_goals
HTTP/2中的流对应于构成请求及其相应响应的所有帧,因此自然是处理优先级和流量控制的地方。 “这个请求的响应应该有高优先级”和“这个请求的流和它的响应应该有高优先级”这句话是等价的。
你引用的文档中提到了一个流携带“一个或多个消息”,但我认为那只是该文档中草率的语言。如果您查看 section 8.1 of the spec,它会显示“客户端在新流上发送 HTTP 请求”和“HTTP request/response 交换完全消耗单个流。”
该流中可能还有其他 帧,例如 PUSH_PROMISE,但这些不是实际的请求和响应;服务器推送的响应数据在新流上发送,然后可以赋予不同的优先级。