[/
    Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail dot com)

    Distributed under the Boost Software License, Version 1.0. (See accompanying
    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

    Official repository: https://github.com/boostorg/beast
]

[section 面向缓冲区的解析]
[block'''<?dbhtml stop-chunking?>''']

__basic_parser__ 的子类可以直接调用，无需使用库提供的流操作。这对于在接口不符合 __Stream__ 要求的对象（例如 [@http://zeromq.org/ ZeroMQ 套接字]）上实现算法时非常有用。基本解析器接口是交互式的：调用方反复调用 [link beast.ref.boost__beast__http__basic_parser.put `basic_parser::put`] 函数并传入缓冲区，直到发生错误或解析完成。当调用方确认不会再有更多数据时（例如底层连接已关闭），可使用 [link beast.ref.boost__beast__http__basic_parser.put_eof `basic_parser::put_eof`] 函数。 

[heading 解析器选项]

解析器提供若干选项，这些选项可在解析开始前进行设置：

[table 解析器选项
[[名称][默认值][描述]]
[[
    [link beast.ref.boost__beast__http__basic_parser.eager.overload2 `eager`]
][
    `false`
][在通常处理流程中，即便输入数据中仍存在未解析的八位字节，解析器在成功解析一个结构化元素（如头部、分块头部或分块体）后也会立即返回。此行为在需要先解析头部，或调用方希望在后续解析可能覆盖某些信息（例如分块扩展）之前进行检查的场景下非常关键。`eager` 选项用于控制解析器在成功解析结构化元素后，若缓冲区中仍存在剩余字节且未发生错误，是否继续执行解析。该选项会在特定流操作中被自动启用或禁用，以便在不影响功能的前提下优化性能。
]]
[[
    [link beast.ref.boost__beast__http__basic_parser.skip.overload2 `skip`]
][
    `false`
][该选项用于控制解析器是否期待接收 HTTP 消息体，这个判断独立于 Content-Length 或分块传输编码等字段是否存在。某些类型的响应本身就不包含消息体。例如，隧道代理对 CONNECT 请求返回的 200 响应，或者对 HEAD 请求的响应。在这些场景下，调用方可以使用该函数告知解析器不需要消息体。解析器在收到头部后就会将消息视为已完整接收。
]]
[[
    [link beast.ref.boost__beast__http__basic_parser.body_limit `body_limit`]
][
    1MB/8MB
][该函数用于设置消息体允许的最大大小。一旦检测到消息体超过该限制，就会触发错误并终止解析过程。这项设置有助于防范资源耗尽攻击，提升服务器安全性。解析请求时的默认限制为 1MB，解析响应时的默认限制为 8MB。
]]
[[
    [link beast.ref.boost__beast__http__basic_parser.header_limit `header_limit`]
][
    8KB
][该函数用于设置头部允许的最大大小，该大小包括所有字段名、字段值、分隔符字符以及序列化输入中的 CRLF 序列。
]]
]



[section:read_from_std_istream 从 std::istream 读取 __示例__]

标准库提供 `std::istream` 类型，用于在字符流上执行高层读取操作。`std::cin` 变量就是基于该输入流实现的。本示例借助 __basic_parser__ 的面向缓冲区接口，构建一个流操作，用于从 `std::istream` 中解析 HTTP 消息：

[example_http_read_istream]

[tip
    从 `std::istream` 解析数据，该操作还可以通过另一种方式实现：
    strategy: adapt the `std::istream` interface to a __SyncReadStream__,
    enabling use with the library's existing stream algorithms. This is
    left as an exercise for the reader.
]

[endsect]



[endsect]
