3个版本
0.1.2 | 2021年5月24日 |
---|---|
0.1.1 | 2021年4月27日 |
0.1.0 | 2021年4月26日 |
在 HTTP客户端 中排名 312
32KB
588 行
Rust库,用于解析和序列化异步 multipart/x-mixed-replace
流,适用于与 reqwest
、hyper
和 tokio
一起使用。
注意 multipart/x-mixed-replace
与 multipart/form-data
不同;你可能对multipart
crate感兴趣。
什么是multipart流?
Multipart流是HTTP响应中的一个部分序列,每个部分都有其自己的头和体。一个流可能永远持续,提供在请求开始时不存在的部分。这是一种“悬挂GET”或Comet请求。每个部分可能代表最新的状态,并在概念上替换先前的部分,因此MIME类型为multipart/x-mixed-replace
。
这是一种简单的HTTP/1.1方法,可以完成通常可能需要更复杂的客户端和服务器端技术的任务,例如:
在IP摄像头领域,永不结束的multipart流似乎很受欢迎
- 大华IP摄像头提供了一种
multipart/x-mixed-replace
事件流,例如运动检测变化。(规范) - 海康威视IP摄像头提供了一个这里描述的事件
multipart/mixed
流。 - 维基百科提及,IP摄像头使用此格式进行MJPEG流。
然而,存在一个很大的限制,即浏览器对并发连接数的限制相对较低。在Chrome的情况下,每个主机的连接数限制为六个。因此,多部分流仅在客户端不是网页浏览器的HTTP API中适用。
多部分流究竟是什么?
一个多部分响应可能看起来像这样
Content-Type: multipart/x-mixed-replace: boundary=B
--B
Content-Type: text/plain
Content-Length: 3
foo
--B
Content-Type: text/plain
Content-Length: 3
bar
通常与Transfer-Encoding: chunked
或Connection: close
配对,以允许发送大小无限或直到结束才可知的响应。
我找不到一个好的规范。《[WHATWG文档](https://html.whatwg.com.cn/multipage/iana.html#multipart/x-mixed-replace)》对multipart/x-mixed-replace
进行了松散的描述。它引用了RFC 2046,该规范最初用于富电子邮件中的多部分编码。我认为这些HTTP多部分流并不完全遵循该RFC。我的库目前需要
- 任何内容类型——调用者应根据需要验证此内容,并将边界参数传递给
multipart-stream
库。 - 没有前言。也就是说,没有要丢弃的任意字节,直到第一个部分的边界。(换行符是可以的。)
- 每个部分和下一个部分边界之间可以有零个或多个换行符(更准确地说:
\r\n
序列)。 - 为每个部分提供一条
Content-Length
行。这种方法比生产者尝试选择一个不会出现在任何部分中的边界,消费者必须搜索部分主体要干净得多。 - 在最终部分的边界上没有额外的
--
后缀。我从未见过。
如果您遇到不满足这些要求的multipart流,请打开github问题。
这个库做什么?
它接受一个Bytes
流(例如由reqwest或hyper返回的流)并返回一个multipart_stream::Part
流,反之亦然。(分别针对客户端或服务器用例。)每个Part
将头和体打包在一起。
作者
Scott Lamb <[email protected]>
许可
SPDX-License-Identifier: MIT OR Apache-2.0
请参阅LICENSE-MIT.txt或LICENSE-APACHE,分别。
依赖关系
~1.5–2.3MB
~44K SLoC