物联网传输协议 - REST/HTTP

网友投稿 564 2022-05-30

在繁杂的物联网应用中,如何根据自己的业务需求,来选择合适且高效的应用层通信传输协议。是一个复杂且需要知识储备的事情。

接下来我们将讲解一下目前常见的一些物联网通信传输协议。

REST/HTTP

在物联网的应用层面,经常通过 REST/HTTP 开放物联网中资源,实现服务被其他应用所调用。其用于实现客户端和服务器之间交互的松耦合,降低了客户端和服务器之间的交互延迟。

物联网传输协议 - REST/HTTP

快速入门

在 HTTP 通信协议中和其他许多的协议相同,用于客户端和服务器之间的通信。

HTTP 通信中,整体通信过程一定是由客户端发出请求,服务端来响应请求。

HTTP 是一种无状态协议。也就是说请求和响应都不会做持久化处理。

HTTP 请求

我们需要先了解一下 HTTP 请求的格式与规范。

首先,如果我们想向服务端发送请求,我们就需要一个标志来知道向谁发送请求,毕竟互联网这么大,谁也不知道随机定位会去哪儿。

就像我们的电话号码一样,如果我想给朋友打一个电话,我就需要输入一串唯一的电话号码。

在请求时,我们要带上我们请求的方法,其主要为所做事情的一个分类缩写。用于精确区分具体功能,简化接口架构复杂性。 基于RESTful 的 HTTP API 请求方法解释如下:

GET - 用于获取资源

POST - 用于添加资源

PUT - 用于更新资源 ( 整体资源 )

PATCH - 用于更新资源( 资源内的部分 )

DELETE - 用于删除资源

当客户端向服务端发送请求时,发送的HTTP 报文就叫做请求报文。

HTTP请求报文由 报文头部 、空行、报文主体三部分组成。如图所示:

报文头部包含请求行 ( 包含请求方法、HTTP版本和URI )、各种头部字段( 稍后讲解 )。

空行( CR+LF )为一个区分头部和请求行的标志符号。

报文主体包含一些所需要传输的数据或为空。

一个完整的HTTP GET 方法的请求报文如下:

HTTP 响应

当服务端接收客户端发送的请求后,要根据业务情况进行返回响应报文。

HTTP 响应报文的格式和请求报文大体类似。也是由报文头部 、空行、报文主体三部分组成。如图所示:

报文头部包含响应状态行( 响应状态码和HTTP 版本 )

完成的HTTP 响应报文如下:

HTTP 的状态码是服务端对客户端请求的返回结果,用来标记服务端对于该请求的处理情况。

一些日常常见的状态码:

2xx

200 OK / 请求成功

3xx

301 Moved Permanently / 被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个 URI 之一。

304 Not Modified / 如果客户端发送了一个带条件的 GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个状态码。

4xx

400 Bad Request / 1. 语义有误,当前请求无法被服务器理解。 2. 请求参数有误。

401 Unauthorized / 当前请求需要用户验证。

403 Forbidden / 服务器已经理解请求,但是拒绝执行它。

404 Not Found / 请求失败,请求所希望得到的资源未被在服务器上发现。

5xx

500 Internal Server Error / 服务器遇到了不知道如何处理的情况。

503 Service Unavailable / 服务器没有准备好处理请求。 常见原因是服务器因维护或重载而停机。

504 Gateway Timeout / 当服务器作为网关,不能及时得到响应时返回此错误代码。

推荐一个有意思的网站,如果你记不住一些状态码,可以去该网站查找。

https://http.cat/

HTTP 头部

在发送请求报文和接收响应报文时我们经常会发现报文头部会有许许多多的头部字段,接下来我们将会对一些常见的字段进行讲解。

HTTP 头部字段时由名称和值构成的一个类似 K-V 结构,中间用冒号分隔。

字段名 : 字段值

有一些字段在请求和响应中都会有,称其为通用头部字段。常见如下:

Cache-Control 控制缓存的行为

Connection 逐跳首部、连接的管理

Date 创建报文的日期时间

Pragma 报文指令

Trailer 报文末端的首部一览

Transfer-Encoding 指定报文主体的传输编码方式

Upgrade 升级为其他协议

Via 代理服务器的相关信息

Warning 错误通知

客户端向服务端发送报文时携带的字段。主要用于标记一下语言、响应格式等信息。

Accept 用户代理可处理的媒体类型

Accept-Charset 优先的字符集

Accept-Encoding 优先的内容编码

Accept-Language 优先的语言(自然语言)

Authorization Web认证信息

Expect 期待服务器的特定行为

From 用户的电子邮箱地址

Host 请求资源所在服务器

服务端向客户端响应报文所附加的字段。主要用于补充响应的附加内容等。

Accept-Ranges 是否接受字节范围请求

Age 推算资源创建经过时间

ETag 资源的匹配信息

Proxy-Authenticate 代理服务器对客户端的认证信息

主要针对请求报文和响应报文的字段。补充了例如内容类型、内容长度等

Content-Encoding 实体主体适用的编码方式

Content-Type 实体主体的媒体类型

Expires 实体主体过期的日期时间

Content-Language 实体主体的自然语言

Content-Length 实体主体的大小(单位:字节)

HTTP 的优缺点

当大家大致了解HTTP协议后,我们将对其进行简单的总结。来分析一下 HTTP 协议的优缺点。

好的方面:

简单、灵活和易于扩展

拥有成熟的生态规范

无状态协议。利于实现分布式集群化。

不好的方面:

明文传输,所有数据可以轻松获取。

无法效验通信双方的身份。导致恶意访问。

无法证明报文的完整,有可能被篡改。

HTTP IoT TCP/IP

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:百度地图开发之点聚合功能
下一篇:我爸电脑上有个加密压缩包,我给用 Python 给解开了
相关文章