1<html> 2<head> 3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 4<title>Message Containers</title> 5<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> 6<meta name="generator" content="DocBook XSL Stylesheets V1.79.1"> 7<link rel="home" href="../../index.html" title="Chapter 1. Boost.Beast"> 8<link rel="up" href="../using_http.html" title="HTTP"> 9<link rel="prev" href="protocol_primer.html" title="Protocol Primer"> 10<link rel="next" href="message_stream_operations.html" title="Message Stream Operations"> 11</head> 12<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> 13<table cellpadding="2" width="100%"><tr> 14<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> 15<td align="center"><a href="../../../../../../index.html">Home</a></td> 16<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> 17<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> 18<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> 19<td align="center"><a href="../../../../../../more/index.htm">More</a></td> 20</tr></table> 21<hr> 22<div class="spirit-nav"> 23<a accesskey="p" href="protocol_primer.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../using_http.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="message_stream_operations.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> 24</div> 25<div class="section"> 26<div class="titlepage"><div><div><h3 class="title"> 27<a name="beast.using_http.message_containers"></a><a class="link" href="message_containers.html" title="Message Containers">Message Containers</a> 28</h3></div></div></div> 29<p> 30 Beast provides a single class template <a class="link" href="../ref/boost__beast__http__message.html" title="http::message"><code class="computeroutput"><span class="identifier">message</span></code></a> and some aliases which model 31 HTTP/1 and <a href="https://tools.ietf.org/html/rfc7540" target="_top">HTTP/2</a> 32 messages: 33 </p> 34<div class="table"> 35<a name="beast.using_http.message_containers.message"></a><p class="title"><b>Table 1.15. Message</b></p> 36<div class="table-contents"><table class="table" summary="Message"> 37<colgroup> 38<col> 39<col> 40</colgroup> 41<thead><tr> 42<th> 43 <p> 44 Name 45 </p> 46 </th> 47<th> 48 <p> 49 Description 50 </p> 51 </th> 52</tr></thead> 53<tbody> 54<tr> 55<td> 56 <p> 57 <a class="link" href="../ref/boost__beast__http__message.html" title="http::message"><code class="computeroutput"><span class="identifier">message</span></code></a> 58 </p> 59 </td> 60<td> 61<pre class="programlisting"><span class="comment">/// An HTTP message</span> 62<span class="keyword">template</span><span class="special"><</span> 63 <span class="keyword">bool</span> <span class="identifier">isRequest</span><span class="special">,</span> <span class="comment">// `true` for requests, `false` for responses</span> 64 <span class="keyword">class</span> <span class="identifier">Body</span><span class="special">,</span> <span class="comment">// Controls the container and algorithms used for the body</span> 65 <span class="keyword">class</span> <span class="identifier">Fields</span> <span class="special">=</span> <span class="identifier">fields</span><span class="special">></span> <span class="comment">// The type of container to store the fields</span> 66<span class="keyword">class</span> <span class="identifier">message</span><span class="special">;</span> 67</pre> 68 </td> 69</tr> 70<tr> 71<td> 72 <p> 73 <a class="link" href="../ref/boost__beast__http__request.html" title="http::request"><code class="computeroutput"><span class="identifier">request</span></code></a> 74 </p> 75 </td> 76<td> 77<pre class="programlisting"><span class="comment">/// A typical HTTP request</span> 78<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Body</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Fields</span> <span class="special">=</span> <span class="identifier">fields</span><span class="special">></span> 79<span class="keyword">using</span> <span class="identifier">request</span> <span class="special">=</span> <span class="identifier">message</span><span class="special"><</span><span class="keyword">true</span><span class="special">,</span> <span class="identifier">Body</span><span class="special">,</span> <span class="identifier">Fields</span><span class="special">>;</span> 80</pre> 81 </td> 82</tr> 83<tr> 84<td> 85 <p> 86 <a class="link" href="../ref/boost__beast__http__response.html" title="http::response"><code class="computeroutput"><span class="identifier">response</span></code></a> 87 </p> 88 </td> 89<td> 90<pre class="programlisting"><span class="comment">/// A typical HTTP response</span> 91<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Body</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Fields</span> <span class="special">=</span> <span class="identifier">fields</span><span class="special">></span> 92<span class="keyword">using</span> <span class="identifier">response</span> <span class="special">=</span> <span class="identifier">message</span><span class="special"><</span><span class="keyword">false</span><span class="special">,</span> <span class="identifier">Body</span><span class="special">,</span> <span class="identifier">Fields</span><span class="special">>;</span> 93</pre> 94 </td> 95</tr> 96</tbody> 97</table></div> 98</div> 99<br class="table-break"><p> 100 The container offers value semantics including move and copy if supported 101 by <a class="link" href="../concepts/Body.html" title="Body"><span class="emphasis"><em>Body</em></span></a> and 102 <a class="link" href="../concepts/Fields.html" title="Fields"><span class="emphasis"><em>Fields</em></span></a>. 103 User defined template function parameters can accept any message, or can 104 use partial specialization to accept just requests or responses. The default 105 <a class="link" href="../ref/boost__beast__http__fields.html" title="http::fields"><code class="computeroutput"><span class="identifier">fields</span></code></a> 106 is a provided associative container using the standard allocator and supporting 107 modification and inspection of fields. As per <a href="https://tools.ietf.org/html/rfc7230" target="_top">rfc7230</a>, 108 a non-case-sensitive comparison is used for field names. User defined types 109 for fields are possible. The <code class="computeroutput"><span class="identifier">Body</span></code> 110 type determines the type of the container used to represent the body as well 111 as the algorithms for transferring buffers to and from the container. The 112 library comes with a collection of common body types. As with fields, user 113 defined body types are possible. 114 </p> 115<p> 116 Sometimes it is desired to only work with a header. Beast provides a single 117 class template <a class="link" href="../ref/boost__beast__http__header.html" title="http::header"><code class="computeroutput"><span class="identifier">header</span></code></a> and some aliases to model 118 HTTP/1 and HTTP/2 headers: 119 </p> 120<div class="table"> 121<a name="beast.using_http.message_containers.header"></a><p class="title"><b>Table 1.16. Header</b></p> 122<div class="table-contents"><table class="table" summary="Header"> 123<colgroup> 124<col> 125<col> 126</colgroup> 127<thead><tr> 128<th> 129 <p> 130 Name 131 </p> 132 </th> 133<th> 134 <p> 135 Description 136 </p> 137 </th> 138</tr></thead> 139<tbody> 140<tr> 141<td> 142 <p> 143 <a class="link" href="../ref/boost__beast__http__header.html" title="http::header"><code class="computeroutput"><span class="identifier">header</span></code></a> 144 </p> 145 </td> 146<td> 147<pre class="programlisting"><span class="comment">/// An HTTP header</span> 148<span class="keyword">template</span><span class="special"><</span> 149 <span class="keyword">bool</span> <span class="identifier">isRequest</span><span class="special">,</span> <span class="comment">// `true` for requests, `false` for responses</span> 150 <span class="keyword">class</span> <span class="identifier">Fields</span> <span class="special">=</span> <span class="identifier">fields</span><span class="special">></span> <span class="comment">// The type of container to store the fields</span> 151<span class="keyword">class</span> <span class="identifier">header</span><span class="special">;</span> 152</pre> 153 </td> 154</tr> 155<tr> 156<td> 157 <p> 158 <a class="link" href="../ref/boost__beast__http__request_header.html" title="http::request_header"><code class="computeroutput"><span class="identifier">request_header</span></code></a> 159 </p> 160 </td> 161<td> 162<pre class="programlisting"><span class="comment">/// A typical HTTP request header</span> 163<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Fields</span><span class="special">></span> 164<span class="keyword">using</span> <span class="identifier">request_header</span> <span class="special">=</span> <span class="identifier">header</span><span class="special"><</span><span class="keyword">true</span><span class="special">,</span> <span class="identifier">Fields</span><span class="special">>;</span> 165</pre> 166 </td> 167</tr> 168<tr> 169<td> 170 <p> 171 <a class="link" href="../ref/boost__beast__http__response_header.html" title="http::response_header"><code class="computeroutput"><span class="identifier">response_header</span></code></a> 172 </p> 173 </td> 174<td> 175<pre class="programlisting"><span class="comment">/// A typical HTTP response header</span> 176<span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Fields</span><span class="special">></span> 177<span class="keyword">using</span> <span class="identifier">response_header</span> <span class="special">=</span> <span class="identifier">header</span><span class="special"><</span><span class="keyword">false</span><span class="special">,</span> <span class="identifier">Fields</span><span class="special">>;</span> 178</pre> 179 </td> 180</tr> 181</tbody> 182</table></div> 183</div> 184<br class="table-break"><p> 185 Requests and responses share the version, fields, and body but have a few 186 members unique to the type. This is implemented by declaring the header classes 187 as partial specializations of <code class="computeroutput"><span class="identifier">isRequest</span></code>. 188 <a class="link" href="../ref/boost__beast__http__message.html" title="http::message"><code class="computeroutput"><span class="identifier">message</span></code></a> 189 is derived from <a class="link" href="../ref/boost__beast__http__header.html" title="http::header"><code class="computeroutput"><span class="identifier">header</span></code></a>; a message may be passed 190 as an argument to a function taking a suitably typed header as a parameter. 191 Additionally, <code class="computeroutput"><span class="identifier">header</span></code> is publicly 192 derived from <code class="computeroutput"><span class="identifier">Fields</span></code>; a message 193 inherits all the member functions of <code class="computeroutput"><span class="identifier">Fields</span></code>. 194 This diagram shows the inheritance relationship between header and message, 195 along with some of the notable differences in members in each partial specialization: 196 </p> 197<p> 198 <span class="inlinemediaobject"><img src="../images/message.png" width="730"></span> 199 </p> 200<h5> 201<a name="beast.using_http.message_containers.h0"></a> 202 <span class="phrase"><a name="beast.using_http.message_containers.body"></a></span><a class="link" href="message_containers.html#beast.using_http.message_containers.body">Body 203 Types</a> 204 </h5> 205<p> 206 Beast defines the <a class="link" href="../concepts/Body.html" title="Body"><span class="emphasis"><em>Body</em></span></a> 207 concept, which determines both the type of the <a class="link" href="../ref/boost__beast__http__message/body.html" title="http::message::body"><code class="computeroutput"><span class="identifier">message</span><span class="special">::</span><span class="identifier">body</span></code></a> member (as seen in the diagram 208 above) and may also include algorithms for transferring buffers in and out. 209 These algorithms are used during parsing and serialization. Users may define 210 their own body types which meet the requirements, or use the ones that come 211 with the library: 212 </p> 213<div class="informaltable"><table class="table"> 214<colgroup> 215<col> 216<col> 217</colgroup> 218<thead><tr> 219<th> 220 <p> 221 Name 222 </p> 223 </th> 224<th> 225 <p> 226 Description 227 </p> 228 </th> 229</tr></thead> 230<tbody> 231<tr> 232<td> 233 <p> 234 <a class="link" href="../ref/boost__beast__http__buffer_body.html" title="http::buffer_body"><code class="computeroutput"><span class="identifier">buffer_body</span></code></a> 235 </p> 236 </td> 237<td> 238 <p> 239 A body whose <a class="link" href="../ref/boost__beast__http__buffer_body__value_type.html" title="http::buffer_body::value_type"><code class="computeroutput"><span class="identifier">value_type</span></code></a> holds a raw 240 pointer and size to a caller-provided buffer. This allows for serialization 241 of body data coming from external sources, and incremental parsing 242 of message body content using a fixed size buffer. 243 </p> 244 </td> 245</tr> 246<tr> 247<td> 248 <p> 249 <a class="link" href="../ref/boost__beast__http__dynamic_body.html" title="http::dynamic_body"><code class="computeroutput"><span class="identifier">dynamic_body</span></code></a> 250 </p> 251 <p> 252 <a class="link" href="../ref/boost__beast__http__basic_dynamic_body.html" title="http::basic_dynamic_body"><code class="computeroutput"><span class="identifier">basic_dynamic_body</span></code></a> 253 </p> 254 </td> 255<td> 256 <p> 257 A body whose <code class="computeroutput"><span class="identifier">value_type</span></code> 258 is a <a class="link" href="../concepts/DynamicBuffer.html" title="DynamicBuffer"><span class="emphasis"><em>DynamicBuffer</em></span></a>. 259 It inherits the insertion complexity of the underlying choice of 260 dynamic buffer. Messages with this body type may be serialized 261 and parsed. 262 </p> 263 </td> 264</tr> 265<tr> 266<td> 267 <p> 268 <a class="link" href="../ref/boost__beast__http__empty_body.html" title="http::empty_body"><code class="computeroutput"><span class="identifier">empty_body</span></code></a> 269 </p> 270 </td> 271<td> 272 <p> 273 A special body with an empty <code class="computeroutput"><span class="identifier">value_type</span></code> 274 indicating that the message has no body. Messages with this body 275 may be serialized and parsed; however, body octets received while 276 parsing a message with this body will generate a unique error. 277 </p> 278 </td> 279</tr> 280<tr> 281<td> 282 <p> 283 <a class="link" href="../ref/boost__beast__http__file_body.html" title="http::file_body"><code class="computeroutput"><span class="identifier">file_body</span></code></a> 284 </p> 285 <p> 286 <a class="link" href="../ref/boost__beast__http__basic_file_body.html" title="http::basic_file_body"><code class="computeroutput"><span class="identifier">basic_file_body</span></code></a> 287 </p> 288 </td> 289<td> 290 <p> 291 This body is represented by a file opened for either reading or 292 writing. Messages with this body may be serialized and parsed. 293 HTTP algorithms will use the open file for reading and writing, 294 for streaming and incremental sends and receives. 295 </p> 296 </td> 297</tr> 298<tr> 299<td> 300 <p> 301 <a class="link" href="../ref/boost__beast__http__span_body.html" title="http::span_body"><code class="computeroutput"><span class="identifier">span_body</span></code></a> 302 </p> 303 </td> 304<td> 305 <p> 306 A body whose <code class="computeroutput"><span class="identifier">value_type</span></code> 307 is a <a class="link" href="../ref/boost__beast__span.html" title="span"><code class="computeroutput"><span class="identifier">span</span></code></a>, a non-owning reference 308 to a single linear buffer of bytes. Messages with this body type 309 may be serialized and parsed. 310 </p> 311 </td> 312</tr> 313<tr> 314<td> 315 <p> 316 <a class="link" href="../ref/boost__beast__http__string_body.html" title="http::string_body"><code class="computeroutput"><span class="identifier">string_body</span></code></a> 317 </p> 318 <p> 319 <a class="link" href="../ref/boost__beast__http__basic_string_body.html" title="http::basic_string_body"><code class="computeroutput"><span class="identifier">basic_string_body</span></code></a> 320 </p> 321 </td> 322<td> 323 <p> 324 A body whose <code class="computeroutput"><span class="identifier">value_type</span></code> 325 is <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span></code> or <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span></code>. Insertion complexity 326 is amortized constant time, while capacity grows geometrically. 327 Messages with this body type may be serialized and parsed. This 328 is the type of body used in the examples. 329 </p> 330 </td> 331</tr> 332<tr> 333<td> 334 <p> 335 <a class="link" href="../ref/boost__beast__http__vector_body.html" title="http::vector_body"><code class="computeroutput"><span class="identifier">vector_body</span></code></a> 336 </p> 337 </td> 338<td> 339 <p> 340 A body whose <code class="computeroutput"><span class="identifier">value_type</span></code> 341 is <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span></code>. Insertion complexity 342 is amortized constant time, while capacity grows geometrically. 343 Messages with this body type may be serialized and parsed. 344 </p> 345 </td> 346</tr> 347</tbody> 348</table></div> 349<h5> 350<a name="beast.using_http.message_containers.h1"></a> 351 <span class="phrase"><a name="beast.using_http.message_containers.usage"></a></span><a class="link" href="message_containers.html#beast.using_http.message_containers.usage">Usage</a> 352 </h5> 353<p> 354 These examples show how to create and fill in request and response objects: 355 Here we build an <a href="https://tools.ietf.org/html/rfc7231#section-4.3.1" target="_top">HTTP 356 GET</a> request with an empty message body: 357 </p> 358<div class="table"> 359<a name="beast.using_http.message_containers.create_request"></a><p class="title"><b>Table 1.17. Create Request</b></p> 360<div class="table-contents"><table class="table" summary="Create Request"> 361<colgroup> 362<col> 363<col> 364</colgroup> 365<thead><tr> 366<th> 367 <p> 368 Statements 369 </p> 370 </th> 371<th> 372 <p> 373 Serialized Result 374 </p> 375 </th> 376</tr></thead> 377<tbody><tr> 378<td> 379<pre class="programlisting"><span class="identifier">request</span><span class="special"><</span><span class="identifier">empty_body</span><span class="special">></span> <span class="identifier">req</span><span class="special">;</span> 380<span class="identifier">req</span><span class="special">.</span><span class="identifier">version</span><span class="special">(</span><span class="number">11</span><span class="special">);</span> <span class="comment">// HTTP/1.1</span> 381<span class="identifier">req</span><span class="special">.</span><span class="identifier">method</span><span class="special">(</span><span class="identifier">verb</span><span class="special">::</span><span class="identifier">get</span><span class="special">);</span> 382<span class="identifier">req</span><span class="special">.</span><span class="identifier">target</span><span class="special">(</span><span class="string">"/index.htm"</span><span class="special">);</span> 383<span class="identifier">req</span><span class="special">.</span><span class="identifier">set</span><span class="special">(</span><span class="identifier">field</span><span class="special">::</span><span class="identifier">accept</span><span class="special">,</span> <span class="string">"text/html"</span><span class="special">);</span> 384<span class="identifier">req</span><span class="special">.</span><span class="identifier">set</span><span class="special">(</span><span class="identifier">field</span><span class="special">::</span><span class="identifier">user_agent</span><span class="special">,</span> <span class="string">"Beast"</span><span class="special">);</span> 385</pre> 386 </td> 387<td> 388<pre class="programlisting"><span class="identifier">GET</span> <span class="special">/</span><span class="identifier">index</span><span class="special">.</span><span class="identifier">htm</span> <span class="identifier">HTTP</span><span class="special">/</span><span class="number">1.1</span><span class="special">\</span><span class="identifier">r</span><span class="special">\</span><span class="identifier">n</span> 389<span class="identifier">Accept</span><span class="special">:</span> <span class="identifier">text</span><span class="special">/</span><span class="identifier">html</span><span class="special">\</span><span class="identifier">r</span><span class="special">\</span><span class="identifier">n</span> 390<span class="identifier">User</span><span class="special">-</span><span class="identifier">Agent</span><span class="special">:</span> <span class="identifier">Beast</span><span class="special">\</span><span class="identifier">r</span><span class="special">\</span><span class="identifier">n</span> 391<span class="special">\</span><span class="identifier">r</span><span class="special">\</span><span class="identifier">n</span> 392</pre> 393 </td> 394</tr></tbody> 395</table></div> 396</div> 397<br class="table-break"><p> 398 In this code we create an HTTP response with a status code indicating success. 399 This message has a body with a non-zero length. The function <a class="link" href="../ref/boost__beast__http__message/prepare_payload.html" title="http::message::prepare_payload"><code class="computeroutput"><span class="identifier">message</span><span class="special">::</span><span class="identifier">prepare_payload</span></code></a> automatically sets 400 the Content-Length or Transfer-Encoding field depending on the content and 401 type of the <code class="computeroutput"><span class="identifier">body</span></code> member. 402 Use of this function is optional; these fields may also be set explicitly. 403 </p> 404<div class="table"> 405<a name="beast.using_http.message_containers.create_response"></a><p class="title"><b>Table 1.18. Create Response</b></p> 406<div class="table-contents"><table class="table" summary="Create Response"> 407<colgroup> 408<col> 409<col> 410</colgroup> 411<thead><tr> 412<th> 413 <p> 414 Statements 415 </p> 416 </th> 417<th> 418 <p> 419 Serialized Result 420 </p> 421 </th> 422</tr></thead> 423<tbody><tr> 424<td> 425<pre class="programlisting"><span class="identifier">response</span><span class="special"><</span><span class="identifier">string_body</span><span class="special">></span> <span class="identifier">res</span><span class="special">;</span> 426<span class="identifier">res</span><span class="special">.</span><span class="identifier">version</span><span class="special">(</span><span class="number">11</span><span class="special">);</span> <span class="comment">// HTTP/1.1</span> 427<span class="identifier">res</span><span class="special">.</span><span class="identifier">result</span><span class="special">(</span><span class="identifier">status</span><span class="special">::</span><span class="identifier">ok</span><span class="special">);</span> 428<span class="identifier">res</span><span class="special">.</span><span class="identifier">set</span><span class="special">(</span><span class="identifier">field</span><span class="special">::</span><span class="identifier">server</span><span class="special">,</span> <span class="string">"Beast"</span><span class="special">);</span> 429<span class="identifier">res</span><span class="special">.</span><span class="identifier">body</span><span class="special">()</span> <span class="special">=</span> <span class="string">"Hello, world!"</span><span class="special">;</span> 430<span class="identifier">res</span><span class="special">.</span><span class="identifier">prepare_payload</span><span class="special">();</span> 431</pre> 432 </td> 433<td> 434<pre class="programlisting"><span class="identifier">HTTP</span><span class="special">/</span><span class="number">1.1</span> <span class="number">200</span> <span class="identifier">OK</span><span class="special">\</span><span class="identifier">r</span><span class="special">\</span><span class="identifier">n</span> 435<span class="identifier">Server</span><span class="special">:</span> <span class="identifier">Beast</span><span class="special">\</span><span class="identifier">r</span><span class="special">\</span><span class="identifier">n</span> 436<span class="identifier">Content</span><span class="special">-</span><span class="identifier">Length</span><span class="special">:</span> <span class="number">13</span><span class="special">\</span><span class="identifier">r</span><span class="special">\</span><span class="identifier">n</span> 437<span class="special">\</span><span class="identifier">r</span><span class="special">\</span><span class="identifier">n</span> 438<span class="identifier">Hello</span><span class="special">,</span> <span class="identifier">world</span><span class="special">!</span> 439</pre> 440 </td> 441</tr></tbody> 442</table></div> 443</div> 444<br class="table-break"><p> 445 The implementation will automatically fill in the obsolete <a href="https://tools.ietf.org/html/rfc7230#section-3.1.2" target="_top">reason-phrase</a> 446 from the status code when serializing a message. Or it may be set directly 447 using <a class="link" href="../ref/boost__beast__http__header/reason/overload2.html" title="http::header::reason (2 of 2 overloads)"><code class="computeroutput"><span class="identifier">header</span><span class="special">::</span><span class="identifier">reason</span></code></a>. 448 </p> 449</div> 450<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> 451<td align="left"></td> 452<td align="right"><div class="copyright-footer">Copyright © 2016-2019 Vinnie 453 Falco<p> 454 Distributed under the Boost Software License, Version 1.0. (See accompanying 455 file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) 456 </p> 457</div></td> 458</tr></table> 459<hr> 460<div class="spirit-nav"> 461<a accesskey="p" href="protocol_primer.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../using_http.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="message_stream_operations.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> 462</div> 463</body> 464</html> 465