<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="">消息容器</string>
    <string name="">Beast 提供单个类模板 __message__ 及若干别名，用于表示 HTTP/1 和 HTTP/2 消息：</string>
    <string name="">消息</string>
    <string name="17">名称</string>
    <string name="17">描述</string>
    <string name="">__消息__</string>
    <string name="">/// HTTP 消息类\ntemplate&lt;\nbool isRequest, // 若为请求则为 true，若为响应则为 false\nclass Body, // 用于控制消息体的容器及算法\nclass Fields = fields&gt; // 用于存储字段的容器类型\nclass message;</string>
    <string name="">[link beast.ref.boost__beast__http__request `request`]</string>
    <string name="">/// 典型的 HTTP 请求\ntemplate&lt;class Body, class Fields = fields&gt;\nusing request = message&lt;true, Body, Fields&gt;;</string>
    <string name="">[link beast.ref.boost__beast__http__response `response`]</string>
    <string name="">/// 典型的 HTTP 响应\ntemplate&lt;class Body, class Fields = fields&gt;\nusing response = message&lt;false, Body, Fields&gt;;</string>
    <string name="">该容器提供值语义，支持移动和拷贝操作（前提是 __Body__ 和 __Fields__ 支持这些操作）。用户定义的模板函数参数可以接受任意消息，也可通过偏特化仅接受请求或响应。默认的 __fields__ 是一个关联容器，使用标准分配器，支持字段的修改与查询。根据 __rfc7230__，字段名称比较时不区分大小写。用户也可以自定义字段类型。`Body` 类型决定消息体的容器类型，以及用于在容器与缓冲区之间传输数据的算法。该库提供一组常用的消息体类型。与字段类似，用户也可以自定义消息体类型。</string>
    <string name="">有时只需处理头部信息。Beast 提供单个类模板 __header__ 及若干别名，用于表示 HTTP/1 和 HTTP/2 头部：</string>
    <string name="">头部</string>
    <string name="66">名称</string>
    <string name="66">描述</string>
    <string name="">__头部__</string>
    <string name="">/// HTTP 头部\ntemplate&lt;\nbool isRequest, // 若为请求则为 true，若为响应则为 false\nclass Fields = fields&gt; // 用于存储字段的容器类型\nclass header;</string>
    <string name="">[link beast.ref.boost__beast__http__request_header `request_header`]</string>
    <string name="">/// 典型的 HTTP 请求头部\ntemplate&lt;class Fields&gt;\nusing request_header = header&lt;true, Fields&gt;;</string>
    <string name="">[link beast.ref.boost__beast__http__response_header `response_header`]</string>
    <string name="">/// 典型的 HTTP 响应头部\ntemplate&lt;class Fields&gt;\nusing response_header = header&lt;false, Fields&gt;;</string>
    <string name="">请求和响应共享版本号、字段及消息体，但各自拥有一些特有的成员。该设计通过将 `header` 类声明为 `isRequest` 的偏特化来实现。__message__ 派生自 __header__，因此消息可作为参数传递给接受相应类型头部参数的函数。此外，`header` 公开继承自 `Fields`，因此消息也继承了 `Fields` 的所有成员函数。下图展示 `header` 与 `message` 的继承关系，以及每个偏特化中部分显著成员的差异：</string>
    <string name="">消息体类型</string>
    <string name="">Beast 定义 __Body__ 概念，该概念决定 [link beast.ref.boost__beast__http__message.body `message::body`] 成员的类型，同时还可包含用于传入和传出缓冲区的算法。这些算法在解析和序列化过程中使用。用户可以定义满足要求的自定义消息体类型，也可以直接使用该库提供的现有类型：</string>
    <string name="">[link beast.ref.boost__beast__http__buffer_body `buffer_body`]</string>
    <string name="">该消息体类型的 [link beast.ref.boost__beast__http__buffer_body__value_type `value_type`] 包含一个原始指针及其长度，指向调用方提供的缓冲区。该类型支持对来自外部来源的消息体数据进行序列化，并使用固定大小的缓冲区进行消息体内容的增量解析。</string>
    <string name="">[link beast.ref.boost__beast__http__dynamic_body `dynamic_body`]\n\n[link beast.ref.boost__beast__http__basic_dynamic_body `basic_dynamic_body`]</string>
    <string name="">该消息体类型的 `value_type` 为一个 __DynamicBuffer__。其插入操作的复杂度取决于底层动态缓冲区的选择。带有该消息体类型的消息支持序列化和解析操作。</string>
    <string name="">[link beast.ref.boost__beast__http__empty_body `empty_body`]</string>
    <string name="">该消息体类型为一个特殊的空消息体，其 `value_type` 为空，表示消息不包含消息体。带有该消息体类型的消息支持序列化和解析操作；但在解析过程中如果接收到消息体数据，则会生成一个特定的错误。</string>
    <string name="">[link beast.ref.boost__beast__http__file_body `file_body`]\n\n[link beast.ref.boost__beast__http__basic_file_body `basic_file_body`]</string>
    <string name="">该消息体类型通过一个已打开的文件来表示，可用于读取或写入。带有该消息体类型的消息支持序列化和解析操作。HTTP 算法会利用这个已打开的文件执行读写操作，从而支持流式传输及增量式数据收发。</string>
    <string name="">[link beast.ref.boost__beast__http__span_body `span_body`]</string>
    <string name="">该消息体类型的 `value_type` 为 [@boost:/libs/core/doc/html/core/span.html `span`]，这是一个指向单个线性字节缓冲区的非拥有引用。带有该消息体类型的消息可进行序列化和解析。</string>
    <string name="">[link beast.ref.boost__beast__http__string_body `string_body`]\n\n[link beast.ref.boost__beast__http__basic_string_body `basic_string_body`]</string>
    <string name="">该消息体类型的 `value_type` 为 `std::basic_string` 或 `std::string`。插入操作的均摊复杂度为常数时间，容量以几何级数增长。带有该消息体类型的消息支持序列化和解析操作。此类型即为示例中使用的消息体类型。</string>
    <string name="">[link beast.ref.boost__beast__http__vector_body `vector_body`]</string>
    <string name="">该消息体类型的 `value_type` 为 `std::vector`。插入操作的均摊复杂度为常数时间，容量以几何级数增长。带有该消息体类型的消息支持序列化和解析操作。</string>
    <string name="">用法</string>
    <string name="">以下示例展示如何创建并填充请求和响应对象。这里构造一个带有空消息体的 [@https://tools.ietf.org/html/rfc7231#section-4.3.1 HTTP GET] 请求：</string>
    <string name="">创建请求</string>
    <string name="193">声明</string>
    <string name="193">序列化结果</string>
    <string name="">[http_snippet_2]</string>
    <string name="">GET /index.htm HTTP/1.1\\r\\n\nAccept: text/html\\r\\n\nUser-Agent: Beast\\r\\n\n\\r\\n</string>
    <string name="">以下代码创建一个带有成功状态码的 HTTP 响应。该消息包含一个非空的消息体。prepare_payload 函数会根据 body 成员的内容和类型自动设置 Content-Length 或 Transfer-Encoding 字段。该函数可调用也可不调用；这些字段也可手动显式设置。</string>
    <string name="">创建响应</string>
    <string name="214">声明</string>
    <string name="214">序列化结果</string>
    <string name="">[http_snippet_3]</string>
    <string name="">HTTP/1.1 200 OK\\r\\n\nServer: Beast\\r\\n\nContent-Length: 13\\r\\n\n\\r\\n\nHello, world!</string>
    <string name="">当序列化消息时，实现会根据状态码自动填充已废弃的 [@https://tools.ietf.org/html/rfc7230#section-3.1.2 原因短语]。也可通过调用 [link beast.ref.boost__beast__http__header.reason.overload2 `header::reason`] 直接设置该字段。</string>
</resources>
