#http-parser #http-1 #safe #strict #slow #io

safehttp

一个慢速(但简单、安全且严格)的 HTTP/1.1 解析器

2 个不稳定版本

使用旧的 Rust 2015

0.2.0 2024年5月24日
0.1.0 2024年5月19日

#1 in #slow

Download history 279/week @ 2024-05-19 21/week @ 2024-05-26 4/week @ 2024-06-02 1/week @ 2024-06-09 1/week @ 2024-06-16

68 每月下载量

MIT/Apache

66KB
1.5K SLoC

safehttp

safehttp 是一个 Rust 的 HTTP/1.1 解析器,它慢速(但简单、安全且严格)。

与其他一些 Rust 的 HTTP 解析器不同,这个库侧重于安全性而不是性能。我们大多数人不需要高性能的亚微秒级 SIMD 启用的事件驱动零拷贝 HTTP 解析。我们都知道 HTTP 解析器存在漏洞 do exist。这个 crate 不使用任何不安全代码。

请在使用之前审查此代码。反馈和其他贡献非常受欢迎。

crates.io 上的包Crates.io Version

API 文档 docs.rs

用法

此解析器使用 http crate 中的(事实上的标准)类型。

[待办事项]

RFC 7230 兼容性

为了简单起见,此解析器不支持可选的和不常使用的 HTTP 功能,如块尾迹、块扩展或异类传输编码(除了 chunked)。

此解析器尽可能严格:例如,拒绝非标准行结束(即不是 CRLF)。

然而,此解析器旨在完全符合规范,并且应该与大多数用户代理无任何问题地工作。

模糊测试

待办事项

自动化测试

待办事项

HTTP/2 和 HTTP/3 支持

HTTP/2 目前不受支持,但将来可能添加。我实际上并不反对 HTTP/2,但它目前不如 HTTP/1.1 受欢迎,对于服务器来说,大多数客户端在升级之前都会发送 HTTP/1.1 请求。因此,无论如何都需要 HTTP/1.1 解析。

HTTP/3 与 HTTP/2 和 HTTP/1 有很大不同,因此最好在不同的库中支持它。

许可证

safehttp 主要在 MIT 许可证和 Apache 许可证(版本 2.0)的条款下分发。有关详细信息,请参阅 LICENSE-APACHE 和 LICENSE-MIT。

可能的改进

  • 编写更多测试。虽然有一些测试,但总是更好的。

  • 值得用 nom 重写解析器。当前实现的前瞻性并不特别美观,但这将添加一个依赖...

依赖项

~625KB
~10K SLoC