• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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">&lt;</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">&gt;</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">&lt;</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">&gt;</span>
79<span class="keyword">using</span> <span class="identifier">request</span> <span class="special">=</span> <span class="identifier">message</span><span class="special">&lt;</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">&gt;;</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">&lt;</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">&gt;</span>
92<span class="keyword">using</span> <span class="identifier">response</span> <span class="special">=</span> <span class="identifier">message</span><span class="special">&lt;</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">&gt;;</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">&lt;</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">&gt;</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">&lt;</span><span class="keyword">class</span> <span class="identifier">Fields</span><span class="special">&gt;</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">&lt;</span><span class="keyword">true</span><span class="special">,</span> <span class="identifier">Fields</span><span class="special">&gt;;</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">&lt;</span><span class="keyword">class</span> <span class="identifier">Fields</span><span class="special">&gt;</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">&lt;</span><span class="keyword">false</span><span class="special">,</span> <span class="identifier">Fields</span><span class="special">&gt;;</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">&lt;</span><span class="identifier">empty_body</span><span class="special">&gt;</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">&lt;</span><span class="identifier">string_body</span><span class="special">&gt;</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