<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.1" version="1.1">
  <file original="NoName" source-language="en" datatype="plaintext" target-language="zh_Hans">
    <body>
      <trans-unit xml:space="preserve" approved="no" id="0348d31aa2f92963">
        <source>HTTP Comparison to Other Libraries</source>
        <target state="translated">HTTP 与其他库的比较</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">10</context>
        </context-group>
        <note from="developer">type: section title</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="2d49845a397548fa">
        <source>There are a few C++ published libraries which implement some of the HTTP protocol. We analyze the message model chosen by those libraries and discuss the advantages and disadvantages relative to Beast.</source>
        <target state="translated">目前已有一些 C++ 库实现了部分 HTTP 协议。我们将分析这些库所采用的消息模型，并讨论它们相对于 Beast 的优缺点。</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">12</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="56c4b5b85a298844">
        <source>The general strategy used by the author to evaluate external libraries is as follows:</source>
        <target state="translated">作者评估外部库的总体策略如下：</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">16</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="0cf69c38edb55b76">
        <source>* Review the message model. Can it represent a complete request or</source>
        <target state="translated">* 审查消息模型。它能否表示一个完整的请求或</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">19</context>
        </context-group>
        <note from="developer">type: list</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="72acced25163b9a9">
        <source>* Review the stream abstraction. This is the type of object, such as</source>
        <target state="translated">* 审查流抽象层。这是一种对象类型，例如</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">23</context>
        </context-group>
        <note from="developer">type: list</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="376da205350a78af">
        <source>* Check treatment of buffers. Does the library manage the buffers</source>
        <target state="translated">* 检查缓冲区处理方式。该库是否负责管理缓冲区</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">28</context>
        </context-group>
        <note from="developer">type: list</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="b8f5d9183056323c">
        <source>* How does the library handle corner cases such as trailers,</source>
        <target state="translated">* 该库如何处理尾部（trailers）等边界情况，</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">31</context>
        </context-group>
        <note from="developer">type: list</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="8474f6ee1764b124">
        <source>Declarations examples from external libraries have been edited:</source>
        <target state="translated">来自外部库的声明示例已做编辑：</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">35</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="853df25bcd14a8d4">
        <source>cpp-netlib</source>
        <target state="translated">cpp-netlib</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">41</context>
        </context-group>
        <note from="developer">type: heading</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="c08445bf21915144">
        <source>is a network programming library previously intended for Boost but not having gone through formal review. As of this writing it still uses the Boost name, namespace, and directory structure although the project states that Boost acceptance is no longer a goal. The library is based on Boost.Asio and bills itself as ['"a collection of network related routines/implementations geared towards providing a robust cross-platform networking library"]. It cites ['"Common Message Type"] as a feature. As of the branch previous linked, it uses these declarations: ``` template &lt;class Tag&gt; struct basic_message {</source>
        <target state="translated">cpp-netlib 是一个网络编程库，原本计划纳入 Boost，但并未通过正式审查。在撰写本文时，它仍然使用 Boost 的名称、命名空间和目录结构，尽管该项目声明不再将纳入 Boost 作为目标。该库基于 Boost.Asio，自称是“一组与网络相关的例程/实现，旨在提供一个健壮的跨平台网络库”。它将“通用消息类型”列为其特性之一。在上述链接的分支中，它使用了以下声明：
``` template  struct basic_message {</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">44</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="82">
        <source>}; ```</source>
        <target state="translated">}; ```</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">82</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="48d3a584d56bb920">
        <source>This container is the base class template used to represent HTTP messages. It uses a "tag" type style specializations for a variety of trait classes, allowing for customization of the various parts of the message. For example, a user specializes `headers_container&lt;T&gt;` to determine what container type holds the header fields. We note some problems with the container declaration:</source>
        <target state="translated">这个容器是用于表示 HTTP 消息的基类模板。它使用“标签（tag）”类型风格来特化各种特征类，从而允许对消息的各个部分进行自定义。例如，用户可以通过特化 `headers_container&lt;T&gt;` 来确定使用何种容器类型来存储头部字段。我们注意到该容器的声明存在一些问题：</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">85</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="e111a5a6d7654362">
        <source>* The header and body containers may only be default-constructed.</source>
        <target state="translated">* 头部和主体容器只能通过默认构造函数进行构造。</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">91</context>
        </context-group>
        <note from="developer">type: list</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="32d89d3718056754">
        <source>* No stateful allocator support.</source>
        <target state="translated">* 不支持有状态分配器。</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">93</context>
        </context-group>
        <note from="developer">type: list</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="3625920b1defd773">
        <source>* There is no way to defer the commitment of the type for `body_` to</source>
        <target state="translated">* 无法推迟 `body_` 类型的提交。</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">95</context>
        </context-group>
        <note from="developer">type: list</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="f6337707dce19768">
        <source>* The message model includes a "source" and "destination." This is</source>
        <target state="translated">* 消息模型包含了“源”和“目标”。这是</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">98</context>
        </context-group>
        <note from="developer">type: list</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="62dc60a3bb9511bb">
        <source>* The use of `string_type` (a customization point) for source,</source>
        <target state="translated">* 对源（source）使用 `string_type`（一个自定义点），</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">102</context>
        </context-group>
        <note from="developer">type: list</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="5979ece9b7df95bf">
        <source>* The library uses specializations of `string&lt;Tag&gt;` to change the type</source>
        <target state="translated">* 该库使用 `string&lt;Tag&gt;` 的特化来改变类型</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">112</context>
        </context-group>
        <note from="developer">type: list</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="8711e3da40e25bc0">
        <source>* The specialized trait classes generate a proliferation of small</source>
        <target state="translated">* 特化的特征类会导致大量小型</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">121</context>
        </context-group>
        <note from="developer">type: list</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="ae4811342b697f46">
        <source>* The `string&lt;Tag&gt; customization point constrains user defined body types</source>
        <target state="translated">* `string&lt;Tag&gt;` 自定义点限制了用户自定义主体类型</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">127</context>
        </context-group>
        <note from="developer">type: list</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="ee6a3875774b36db">
        <source>The design of the message container in this library is cumbersome with its system of customization using trait specializations. The use of these customizations is extremely limited due to the way they are used in the container declaration, making the design overly complex without corresponding benefit.</source>
        <target state="translated">该库消息容器的设计非常繁琐，其自定义系统依赖于特征（trait）特化。由于这些自定义机制在容器声明中的使用方式极为受限，导致该设计过于复杂，却未能带来相应的收益。</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">132</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="dd32c91d5409110a">
        <source>Boost.HTTP</source>
        <target state="translated">Boost.HTTP</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">140</context>
        </context-group>
        <note from="developer">type: heading</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="54a53919fefcf76d">
        <source>is a library resulting from the 2014 Google Summer of Code. It was submitted for a Boost formal review and rejected in 2015. It is based on Boost.Asio, and development on the library has continued to the present. As of the branch previously linked, it uses these message declarations: ``` template&lt;class Headers, class Body&gt; struct basic_message {</source>
        <target state="translated">是一个源自 2014 年 Google Summer of Code 的库。它曾于 2015 年提交进行 Boost 正式审查，但遭到拒绝。该库基于 Boost.Asio 构建，其开发工作一直持续至今。在之前链接的分支中，它使用了如下的消息声明：``` template struct basic_message {</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">143</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="166">
        <source>private:</source>
        <target state="translated">private:</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">166</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="170">
        <source>};</source>
        <target state="translated">};</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">170</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="63386ab9e0973380">
        <source>typedef basic_message&lt;boost::http::headers, std::vector&lt;std::uint8_t&gt;&gt; message;</source>
        <target state="translated">typedef basic_message&lt;boost::http::headers, std::vector&lt;std::uint8_t&gt;&gt; message;</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">172</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="70ef9c752dd15fed">
        <source>template&lt;class Headers, class Body&gt; struct is_message&lt;basic_message&lt;Headers, Body&gt;&gt;: public std::true_type {}; ```</source>
        <target state="translated">template&lt;class Headers, class Body&gt; struct is_message&lt;basic_message&lt;Headers, Body&gt;&gt;: public std::true_type {}; ```</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">174</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="978aea7df2468afe">
        <source>* This container cannot model a complete message. The ['start-line] items</source>
        <target state="translated">* 该容器无法对完整的消息进行建模。['start-line] 项</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">178</context>
        </context-group>
        <note from="developer">type: list</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="8150a6ebc45010c1">
        <source>* `headers_`, `body_`, and `trailers_` may only be default-constructed,</source>
        <target state="translated">* `headers_`、`body_` 和 `trailers_` 只能进行默认构造，</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">193</context>
        </context-group>
        <note from="developer">type: list</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="7e5999caf959bcf6">
        <source>* There is no way to defer the commitment of the [*Body] type to after</source>
        <target state="translated">* 无法将 [*Body] 类型的提交推迟到之后进行</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">196</context>
        </context-group>
        <note from="developer">type: list</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="05e62f33a502a7d7">
        <source>* No stateful allocator support. This follows from the previous limitation</source>
        <target state="translated">* 不支持有状态分配器。这是由前一个限制导致的</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">200</context>
        </context-group>
        <note from="developer">type: list</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="a632016d94c93c52">
        <source>* The trailers are stored in a separate object. Aside from the combinatorial</source>
        <target state="translated">* 尾部（trailers）存储在一个单独的对象中。除了组合爆炸的问题之外</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">204</context>
        </context-group>
        <note from="developer">type: list</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="8ff26c41346593ad">
        <source>* The declarations imply that `std::vector` is a model of [*Body].</source>
        <target state="translated">* 这些声明暗示 `std::vector` 是 [*Body] 的一个模型。</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">212</context>
        </context-group>
        <note from="developer">type: list</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="0a96f524b6a903b5">
        <source>* The [*Body] customization point constrains user defined types to</source>
        <target state="translated">* [*Body] 自定义点将用户自定义类型限制为</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">223</context>
        </context-group>
        <note from="developer">type: list</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="8c3d5c10e67b081d">
        <source>This representation addresses a narrow range of  use cases. It has limited potential for customization and performance. It is more difficult to use because it excludes the start line fields from the model.</source>
        <target state="translated">* 这种表示法仅能解决一小部分用例。其自定义潜力和性能表现均十分有限。由于该模型将起始行（start line）字段排除在外，导致其使用难度增加。</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">228</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="1ba4318d6f1161a7">
        <source>C++ REST SDK (cpprestsdk)</source>
        <target state="translated">C++ REST SDK (cpprestsdk)</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">234</context>
        </context-group>
        <note from="developer">type: heading</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="909aa1439eecd313">
        <source>is a Microsoft project which ['"...aims to help C++ developers connect to and interact with services"]. It offers the most functionality of the libraries reviewed here, including support for Websocket services using its websocket++ dependency. It can use native APIs such as HTTP.SYS when building Windows based applications, and it can use Boost.Asio. The WebSocket module uses Boost.Asio exclusively.</source>
        <target state="translated">是一个微软项目，其目标是“帮助 C++ 开发者连接服务并与之交互”。在本文所评测的库中，它的功能最为全面，包括通过其 websocket++ 依赖项来支持 WebSocket 服务。在构建基于 Windows 的应用程序时，它能够使用诸如 HTTP.SYS 等原生 API，同时也支持使用 Boost.Asio。其中，WebSocket 模块专门且排他性地使用了 Boost.Asio。</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">237</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="b320b78f6cf0710f">
        <source>As cpprestsdk is developed by a large corporation, it contains quite a bit of functionality and necessarily has more interfaces. We will break down the interfaces used to model messages into more manageable pieces. This is the container used to store the HTTP header fields: ``` class http_headers { public:</source>
        <target state="translated">由于 cpprestsdk 由大型公司（微软）开发，它包含了相当多的功能，因此也必然拥有更多的接口。我们将把用于建模消息的接口拆解为更易于管理的部分。以下是用于存储 HTTP 头字段的容器： ``` class http_headers { public:</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">244</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="254">
        <source>private:</source>
        <target state="translated">private:</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">254</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="256">
        <source>}; ```</source>
        <target state="translated">}; ```</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">256</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="a1f08ea200d0161d">
        <source>This declaration is quite bare-bones. We note the typical problems of most field containers:</source>
        <target state="translated">这个声明相当简陋。我们注意到大多数字段容器都存在一些典型问题：</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">259</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="40c57198cfff2c19">
        <source>* The container may only be default-constructed.</source>
        <target state="translated">* 该容器只能进行默认构造。</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">262</context>
        </context-group>
        <note from="developer">type: list</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="6de8eddee5633d27">
        <source>* No support for allocators, stateful or otherwise.</source>
        <target state="translated">* 不支持分配器，无论是有状态分配器还是其他类型的分配器。</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">264</context>
        </context-group>
        <note from="developer">type: list</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="157a48563e535572">
        <source>* There are no customization points at all.</source>
        <target state="translated">* 完全没有任何自定义点。</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">266</context>
        </context-group>
        <note from="developer">type: list</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="2dcaa2bbe1a426f2">
        <source>Now we analyze the structure of the larger message container. The library uses a handle/body idiom. There are two public message container interfaces, one for requests (`http_request`) and one for responses (`http_response`). Each interface maintains a private shared pointer to an implementation class. Public member function calls are routed to the internal implementation. This is the first implementation class, which forms the base class for both the request and response implementations: ``` namespace details {</source>
        <target state="translated">现在，我们来分析更大的消息容器的结构。该库使用了句柄/主体惯用法（handle/body idiom）。它提供了两个公开的消息容器接口，一个用于请求（`http_request`），另一个用于响应（`http_response`）。每个接口都维护着一个指向实现类的私有共享指针。公开的成员函数调用会被路由到内部的实现。以下是第一个实现类，它构成了请求和响应实现类的基类： ``` namespace details {</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">268</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="7d7415e78e33f474">
        <source>class http_msg_base { public:</source>
        <target state="translated">class http_msg_base { public:</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">279</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="0a758ffa86abf15a">
        <source>protected:</source>
        <target state="translated">protected:</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">294</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="306">
        <source>}; ```</source>
        <target state="translated">}; ```</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">306</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="197fb0c4b41dce42">
        <source>To understand these declarations we need to first understand that cpprestsdk uses the asynchronous model defined by Microsoft's [@https://msdn.microsoft.com/en-us/library/dd504870.aspx [*Concurrency Runtime]]. Identifiers from the [@https://msdn.microsoft.com/en-us/library/jj987780.aspx [*`pplx` namespace]] define common asynchronous patterns such as tasks and events. The `concurrency::streams::istream` parameter and `m_data_available` data member indicates a lack of separation of concerns. The representation of HTTP messages should not be conflated with the asynchronous model used to serialize or parse those messages in the message declarations.</source>
        <target state="translated">要理解这些声明，需要先了解 cpprestsdk 使用了微软的 [@https://msdn.microsoft.com/en-us/library/dd504870.aspx [*Concurrency Runtime]] 所定义的异步模型。来自 [@https://msdn.microsoft.com/en-us/library/jj987780.aspx [*`pplx` namespace]] 的标识符定义了任务和事件等通用异步模式。`concurrency::streams::istream` 参数和 `m_data_available` 数据成员表明存在关注点分离缺失的问题。在消息声明中，不应将 HTTP 消息的表示形式与用于序列化或解析这些消息的异步模型混为一谈。</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">309</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="f85d1e4ecc3cfbc6">
        <source>The next declaration forms the complete implementation class referenced by the handle in the public interface (which follows after): ``` /// Internal representation of an HTTP request message. class _http_request final : public http::details::http_msg_base, public std::enable_shared_from_this&lt;_http_request&gt; { public:</source>
        <target state="translated">以下声明构成了公开接口中的句柄所引用的完整实现类（该类位于后续）：``` /// HTTP 请求消息的内部表示。 class _http_request final : public http::details::http_msg_base, public std::enable_shared_from_this&lt;_http_request&gt; { public:</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">319</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="336">
        <source>private:</source>
        <target state="translated">private:</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">336</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="344">
        <source>};</source>
        <target state="translated">};</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">344</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="0c970af7a38b31ec">
        <source>} // namespace details ```</source>
        <target state="translated">} // namespace details ```</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">346</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="31423a6875f74f24">
        <source>As before, we note that the implementation class for HTTP requests concerns itself more with the mechanics of sending the message asynchronously than it does with actually modeling the HTTP message as described in __rfc7230__:</source>
        <target state="translated">与之前一样，可以看出，HTTP 请求的实现类更关注于异步发送消息的机制，而不是按照 __rfc7230__ 中的描述对 HTTP 消息进行实际建模：</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">349</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="a634eb7f0d67b291">
        <source>* The constructor accepting `std::unique_ptr&lt;http::details::_http_server_context`</source>
        <target state="translated">* 接受 `std::unique_ptr&lt;http::details::_http_server_context` 的构造函数</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">353</context>
        </context-group>
        <note from="developer">type: list</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="b87c0bd1a64039d5">
        <source>* The "cancellation token" is stored inside the message. This breaks the</source>
        <target state="translated">* “取消令牌”被存储在消息内部。这破坏了</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">357</context>
        </context-group>
        <note from="developer">type: list</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="ae12ae8e6c537262">
        <source>* The `_reply_impl` function implies that the message implementation also</source>
        <target state="translated">* `_reply_impl` 函数意味着消息的实现也</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">360</context>
        </context-group>
        <note from="developer">type: list</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="60e02f71b6ed8779">
        <source>Finally, here is the public class which represents an HTTP request: ``` class http_request { public:</source>
        <target state="translated">最后，下面是代表 HTTP 请求的公共类：``` class http_request { public:</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">364</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="407">
        <source>private:</source>
        <target state="translated">private:</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">407</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="412">
        <source>}; ```</source>
        <target state="translated">}; ```</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">412</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="871beb0f6a4f99a2">
        <source>It is clear from this declaration that the goal of the message model in this library is driven by its use-case (interacting with REST servers) and not to model HTTP messages generally. We note problems similar to the other declarations:</source>
        <target state="translated">从这个声明中可以清楚地看出，该库中消息模型的目标是由其用例（与 REST 服务器交互）驱动的，而不是为了对 HTTP 消息进行通用建模。我们注意到存在与其他声明类似的问题：</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">415</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="fda4be3e18ec96ee">
        <source>* There are no compile-time customization points at all. The only</source>
        <target state="translated">* 完全没有编译期自定义点。唯一</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">420</context>
        </context-group>
        <note from="developer">type: list</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="091a244f3936f917">
        <source>* The extraction of the body is conflated with the asynchronous model.</source>
        <target state="translated">* 消息体的提取与异步模型混为一谈。</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">426</context>
        </context-group>
        <note from="developer">type: list</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="fd7877c28ecdba30">
        <source>* No way to define an allocator for the container used when extracting</source>
        <target state="translated">* 无法为提取数据时所使用的容器定义分配器</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">428</context>
        </context-group>
        <note from="developer">type: list</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="7b6a9e95a93e2b35">
        <source>* A body can only be extracted once, limiting the use of this container</source>
        <target state="translated">* 消息体只能提取一次，这限制了该容器的使用</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">431</context>
        </context-group>
        <note from="developer">type: list</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="dff25322d69eaf4b">
        <source>* Setting the body requires either a vector or a `concurrency::streams::istream`.</source>
        <target state="translated">* 设置消息体需要使用向量或 `concurrency::streams::istream`。</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">434</context>
        </context-group>
        <note from="developer">type: list</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="a18dc6bf3f85c063">
        <source>* The HTTP request container conflates HTTP response behavior (see the</source>
        <target state="translated">* HTTP 请求容器混淆了 HTTP 响应行为（见</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">437</context>
        </context-group>
        <note from="developer">type: list</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="9f2a2913061338ee">
        <source>The general theme of the HTTP message model in cpprestsdk is "no user definable customizations". There is no allocator support, and no separation of concerns. It is designed to perform a specific set of behaviors. In other words, it does not follow the open/closed principle.</source>
        <target state="translated">cpprestsdk 中 HTTP 消息模型的总体主题是“不支持用户可定义的自定义功能”。它没有分配器支持，也没有关注点分离。它的设计目的是执行特定的行为集。换句话说，它没有遵循开闭原则。</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">442</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
      <trans-unit xml:space="preserve" approved="no" id="0ade5eb19b5651db">
        <source>Tasks in the Concurrency Runtime operate in a fashion similar to `std::future`, but with some improvements such as continuations which are not yet in the C++ standard. The costs of using a task based asynchronous interface instead of completion handlers is well documented: synchronization points along the call chain of composed task operations which cannot be optimized away. See: [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3747.pdf [*A Universal Model for Asynchronous Operations]] (Kohlhoff).</source>
        <target state="translated">Concurrency Runtime 中的任务操作方式与 `std::future` 类似，但进行了一些改进，例如 C++ 标准中尚未包含的 continuation（续体）。使用基于任务的异步接口而非完成处理程序（completion handlers）的代价已有详细记录：在组合任务操作的调用链上存在无法优化的同步点。参见：[@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3747.pdf [*A Universal Model for Asynchronous Operations]] (Kohlhoff)。</target>
        <context-group name="" purpose="location">
          <context context-type="sourcefile">447</context>
        </context-group>
        <note from="developer">type: paragraph</note>
      </trans-unit>
    </body>
  </file>
</xliff>
