boost::beast::http::async_read的默认行为

问题描述 投票:0回答:1

我正在运行 boost

1_74
,并发现了一些文档中未描述的行为。通过这样的电话:

http::async_read(*socket, data, request, read_handler);

其中

request
boost::beast::http::request<boost::beast::http::string_body>
,我注意到,当读取格式错误的 HTTP 请求时,目标字符串将始终为空。

这种行为在

read_handler
中可以依赖吗?

c++ boost boost-asio
1个回答
0
投票

不。文档不需要指定每个行为细节。

事实上,像 Asio 和标准库这样的库积极努力“最小化”接口契约,因为过度指定的契约会损害实现的演化。用普通英语来说:它允许他们在不破坏用户的情况下改进实现。

其推论是
海仑定律

所以,不,你不应该依赖这种行为。很容易不这样做,因为您有来自解析器的错误代码。如果您觉得这对可用性有很大帮助,或者可以防止某些类型的错误(例如安全错误),您可以提出功能请求,询问是否值得在规范中限制这种行为。

TL/DR

不,但是即使注意到这是一个相关的问题,你也做对了一切!

根据海仑定律,一定要进行测试,以防您依赖隐性行为。它还将帮助您了解规范何时发生变化(重大变更),这比希望发行说明清晰、完整且实际使用要可靠得多:)

© www.soinside.com 2019 - 2024. All rights reserved.