欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

2018.7.25 学习内容:boost、beast、http

程序员文章站 2022-06-01 09:17:36
...

协议入门

HTTP协议定义客户端和服务器角色:客户端发送请求,服务器发回响应。当客户端和服务器建立连接时,客户端发送一系列请求,而服务器按接收请求的顺序发送回每个接收到的请求的至少一个响应。

请求或响应是具有两个部分的HTTP消息(以下称为“消息”):具有结构化元数据的头部和保持任意数据的可选可变长度体。序列化标题是一个或多个文本行,其中每一行以回车符结束,后跟换行符("\r\n")。空行标记标题的结尾。标题中的第一行称为起始行。起始行内容的内容对于请求和响应是不同的。

每条消息都包含一组零个或多个字段  名称/值对,统称为“字段”。名称和值使用具有各种要求的文本字符串表示。序列化字段包含字段名称,然后是冒号后跟空格(": "),最后是包含尾随CRLF的字段值。

要求:

客户端发送包含方法 和请求目标以及HTTP版本的请求。该方法识别在目标识别应用该操作的服务器上的对象时要执行的操作。版本几乎总是1.1,但较旧的程序有时使用1.0。

序列化请求

描述

GET /HTTP/1.1\r\n
UserAgent:Beast\r\n
\r\n

此请求具有“GET”方法,目标为“/”,并指示HTTP版本1.1。它包含一个名为“User-Agent”的字段,其值为“Beast”。没有消息体。

 

 

回应:

服务器发送响应,其中包含状态代码, 原因短语HTTP版本。短语的原因是过时的:客户端应该忽略原因短语内容。这是一个包含身体的回复。特殊的Content-Length 字段通知远程主机后面的主体大小。

 

序列化响应

描述

HTTP/1.1 200 OK\r\n
Server: Beast\r\n
Content-Length:13\r\n
\r\n
Hello, world!

此响应具有200状态代码,表示请求的操作已成功完成。过时的原因短语是“OK”。它指定HTTP版本1.1,并包含13个八位字节的正文,文本为“Hello,world!”。

消息容器:

beast提供单个模板类和一些模拟HTTP/1和HTTP/2消息的别名是:

名称

     描述                                                                     

message

//HTTP消息

template<

               bool  isRequest,    // true 表示请求 false表示响应

               class  Body,           //控制用于body

               class   Fields = fields>  //容器的类型 to 存储字段

class  message;   

request

//典型的HTTP请求

template<class  Body ,  class  Fields = fields>

using  request = message<true , Body , Fileds>;

response

//典型的HTTP响应

template<class  Body ,  class  Fields = fields>

using  response= message<false, Body , Fileds>;

如果Body 和Fields支持,容器提供值语义,包括移动和复制。用户定义的模板函数参数可以接受任何消息,也可以使用部分特化来接受请求或响应。默认值 fields 是使用标准分配器并支持字段修改和检查的提供的关联容器。根据rfc7230,字段名称使用不区分大小写的比较。用户定义的字段类型是可能的。该Body type确定用于表示正文的容器的类型,以及用于将缓冲区传入和传出容器的算法。该图书馆附带一系列常见的体型。与字段一样,用户定义的主体类型也是可能的。

 

相关标签: boost beast http