关于boost::beast中http::response_parser<buffer_body>转换为http::response_parser<string_body>的安全性问询
关于boost::beast中http::response_parser<buffer_body>转换为http::response_parser<string_body>的安全性问询
嘿,这个问题问到点子上了,刚好我对Boost.Beast的parser转换逻辑摸得比较透,来给你拆解清楚:
首先,你是在async_read_header完成后立刻做的转换,这时候原response_parser<buffer_body>的状态是仅解析完头部,还未开始处理响应体。这时候它的buffer_body相关的buffer指针确实是未设置的,但这完全不影响转换的安全性。
Boost.Beast的response_parser转换构造函数,在跨body类型转换时,只会迁移那些和body类型无关的parser状态:比如已经解析好的响应头、parser的配置项(像是否允许分块编码、头部大小限制这些),还有parser当前的阶段(比如已完成头部解析)。
重点来了:因为你还没开始读取响应体,原parser的buffer_body的buffer指针根本没被实际使用过——async_read_header本身就不需要依赖body的buffer来工作,它只处理头部数据。转换构造函数在这种状态下,完全不会去访问那个未设置的buffer指针,因为它知道parser还没进入body处理阶段,没必要碰body相关的状态。
所以你完全不用提前设置buffer指针,也不用把buffer size设为0,这些操作都是多此一举。你现在的代码写法是安全的,直接用就行。
内容来源于stack exchange
相关产品推荐
相关产品推荐

