http - 我可以在 HTTP 2 上做类似于流水线的事情吗?
问题描述
流水线是 HTTP/1.1 中的一种技术,在该技术中,多个请求在保活连接上一次发送而无需等待响应。然后服务器按顺序返回响应,而无需等待发送响应和接收下一个请求之间的往返时间。
HTTP/2 添加了一个称为多路复用的功能,它同样允许客户端一次发送多个请求。但是,在这种情况下,服务器可以一次发送所有响应。
在没有服务器控制的情况下,我可以在使用 HTTP/2 时实现类似于流水线的功能(即一次按顺序接收响应,并且响应之间没有延迟)吗?
这在下载许多大文件时很有用,没有太多可用内存来缓冲几个部分完成的响应。
解决方案
在没有服务器控制的情况下,我可以在使用 HTTP/2 时实现类似于流水线的功能(即一次按顺序接收响应,并且响应之间没有延迟)吗?
不,你不能,除非服务器合作(例如,服务器可以配置为按顺序处理请求或类似的东西)。
作为旁注,虽然在 HTTP/1.1 中允许请求管道,但它一直被认为是一个坏主意,因此与所有主要实现无关(即浏览器不这样做,服务器并不真正支持它,等等.)。主要问题是错误处理和错误的代理服务器。
HTTP/2 允许客户端设置请求的优先级,以便按优先级顺序处理请求。但是,此功能是可选的,服务器可能不会实现它,因此您需要再次仔细选择/配置服务器以获得您想要的行为。
如果您可以稍微控制服务器端,对于 HTTP/1.1 和 HTTP/2,更好的解决方案是在单个请求中向服务器询问所有文件,并让服务器回复多部分响应。
推荐阅读
- python - Electron child_process 无法正确启动 exe
- ansible - Ansible - 在字典列表中省略参数
- javascript - 有没有一种将视频短代码添加到基于鼠标悬停播放/暂停视频的 Hugo 网站的好方法
- python - Python:使用套接字连接到 mysql 服务器时出错
- flask - Heroku/SQLAlchemy:requirements.txt 本地没有上传到 Heroku 远程
- gradle - 用于将 maven 项目转换为 gradle 的 Gradle init 存储库
- php - setlocale() 在 MacOS 上使用 MAMP 无法在本地主机上工作
- java - 如何在包含对象列表的改造中将模型类作为参数,
- python - Python SQLAlchemy 以小写形式导入表名(雪花)
- ios - “遇到断点 Xcode”时与 Iphone 上的调试器失去连接