物联网传输协议 - REST/HTTP

物联网传输协议

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

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

REST/HTTP

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

快速入门

角色

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

img.png

整体流程

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

img_1.png

HTTP 协议无状态

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

img_2.png

HTTP 请求

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

URI 定位资源

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

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

img_3.png

请求的方法

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

  • GET - 用于获取资源
  • POST - 用于添加资源
  • PUT - 用于更新资源 ( 整体资源 )
  • PATCH - 用于更新资源( 资源内的部分 )
  • DELETE - 用于删除资源

HTTP请求报文结构

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

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

HTTP 报文

  • 报文头部包含请求行 ( 包含请求方法、HTTP版本和URI )、各种头部字段( 稍后讲解 )。
  • 空行( CR+LF )为一个区分头部和请求行的标志符号。
  • 报文主体包含一些所需要传输的数据或为空。

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

 GET请求

HTTP 响应

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

HTTP 响应报文格式

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 协议的优缺点。

好的方面:

  • 简单、灵活和易于扩展
  • 拥有成熟的生态规范
  • 无状态协议。利于实现分布式集群化。

不好的方面:

  • 明文传输,所有数据可以轻松获取。
  • 无法效验通信双方的身份。导致恶意访问。
  • 无法证明报文的完整,有可能被篡改。
拿我格子衫来 CSDN认证博客专家 拿我格子衫来 范马勇次郎 琦玉君
积土成山,风雨兴焉;积水成渊,蛟龙生焉;积善成德,而神明自得,圣心备焉。故不积跬步,无以至千里;不积小流,无以成江海。骐骥一跃,不能十步;驽马十驾,功在不舍。锲而舍之,朽木不折;锲而不舍,金石可镂。蚓无爪牙之利,筋骨之强,上食埃土,下饮黄泉,用心一也。蟹六跪而二螯,非蛇鳝之穴无可寄托者,用心躁也。
相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页