什么是流式传输 http stream?
所谓的流式传输就是response body大小未知,数据动态的发送到前端。
即当前客户端发起的http请求时,服务端并没有在 response header 中反回具体的content-length。content-length就是response body 的大小。
普通的http请求response header里面返回content-length,客户端接收到对应的大小之后关闭请求。正确情况下后端都会一次性返回所有数据。
在http1.1中协议默认是不支持流式传输的,必须要借助在 response header 中添加Transfer-Encoding: chunked。
在http2 / 3 中协议默认就支持流式协议。也就是说你只需要满足两个点1、response body大小未知 2、 数据动态的发送到前端这就是流式传输。不再需要添加额外的字段到response header里面。
如何区分一个请求是不是流式传输?
response header里面不包含content-length
Response header 里面的Content-Type等于application/octet-stream 与内容格式无关
如果是http 1.1 response header里面有Transfer-Encoding: chunked
你可以发现http 的size 在动态发送变化
还有一些极端的做法,比如通过设置content-length来现在动态发起数据的大小。就不在讨论中了