我正在运行 boost
1_74
,并发现了一些文档中未描述的行为。通过这样的电话:
http::async_read(*socket, data, request, read_handler);
其中
request
是 boost::beast::http::request<boost::beast::http::string_body>
,我注意到,当读取格式错误的 HTTP 请求时,目标字符串将始终为空。
这种行为在
read_handler
中可以依赖吗?
不。文档不需要指定每个行为细节。
事实上,像 Asio 和标准库这样的库积极努力“最小化”接口契约,因为过度指定的契约会损害实现的演化。用普通英语来说:它允许他们在不破坏用户的情况下改进实现。
其推论是海仑定律所以,不,你不应该依赖这种行为。很容易不这样做,因为您有来自解析器的错误代码。如果您觉得这对可用性有很大帮助,或者可以防止某些类型的错误(例如安全错误),您可以提出功能请求,询问是否值得在规范中限制这种行为。
TL/DR
根据海仑定律,一定要进行测试,以防您依赖隐性行为。它还将帮助您了解规范何时发生变化(重大变更),这比希望发行说明清晰、完整且实际使用要可靠得多:)