开发者学堂课程【大咖带你聊物联网:从物联网需求到MQTT协议(中)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/571/detail/7778
从物联网需求到 MQTT 协议(中)
一、 HTTP 协议
二、理解 HTTP 协议
三、HTTP 协议产生背景
四、实例感受 HTTP 协议的过程和特点
五、HTTP 的访问的流程
一、HTTP 协议
HTTP 协议 ( HyperText Transfer Protocol ,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的 wwW 文件都必须遵守这个标准。
HTTP 是一个基于 TCP/IP 通信协议来传递数据( HTML 文件,图片文件,查询结果等)。
应用层:HTTP、TLS、SSL
传输层:TCP
网络层:IP
网络接口层:数据链路层
其实网络是一个 HTTP 协议为主,HTTP 协议主要是为了传输网页,HTTP 协议的全称叫做超文本传输协议,那所谓超文本就是文本可以通过点击链接链接到其它的文本或者其它的网页上,HTTP 协议是网上最流行最为广泛的网络咨询,所有的 WWW 的文件都必须遵循这个标准 HTTP 协议,它是一个应用层的协议,而它是基于 TCPIP 的通讯协议进行传输的,所以它是一个应用层的协议,HTTP 的协议发展也很多年了,所以在 HTTP 协议经常可以看到 HTTPS,HTTPS 是对 HTTP 进行加密,同时也有 HTTPR 的这个后续衍生的这个协议。那这些协议都是在应用层的它是在 TCPIP 包之上。
HTTP 协议有很多的特点,它的特点呢,都是为了互联网上免费了浏览网页设计的,所以它这些特点是更适合去浏览网页。
二、理解 HTTP 协议
1、HTTP 是单向的。客户端必须发起连接。在 loT 应用程序中,设备或传感器通常是客户端,这意味着它们无法被动地接收来自网络的命令。
第一个特点,这里问题的需求就是 HTTP 是单向的,它的通讯方式是浏览器进行一个请求到外部服务器那个服务器给一个响应,这个方式其实跟单片机里面常说的一个彩信方式是比较像相近的,它请求的时候是发一个 HTTP 的协议,这一点自然包含了 url ,就是这个网络访问的地址,而当接收到这个请求之后,服务器才会响应一个请求,所以它是一个单向的单向发起,只会从浏览器端进行发起的请求,到外部服务器要普及才会第一个响应。
比如这里我们有一个网页是我们的微信公众号的一个后台,当不去刷新它的时候,这里的数据其实它都不会自己去更新,也就是这个浏览器当不去发起一个访问请求的时候,服务器不会主动推送数据过来。
在网址这里进行了一个刷新,刷新之后就会看到这里的浏览数据进行了一个变更,就是这里发去请求了之后,回传回来的数据,在这里就是服务器给的响应在这里发生了变更。如果不进行刷新的话,数据是不会进行变更的。
有一些情况可能会主动去提示需要去更新,或者是需要去刷新,或者比如说一些网页实现浏览器的一些即时通信工具,它是怎么实现刷新的,可能选用了其它的通讯协议,或者是在类似于基于这样新的之外运用了其它比如 web shop 的这样的协议进行了刷新。
但是纯粹的 HTTP 协议是如果你不去刷新,它是不会主动去刷新的,但是也可以在网页设计的时候做一个定期的刷新的设计。
2、HTTP 是一种1对1协议。客户端发出请求,服务器进行响应。将消息传送到网络上的所有设备上,不但很困难,而且成本很高,而这是 loT 应用程序中的一种常见使用情况。
一个提议客户端发送请求之后,服务器进行响应,客户端对服务器进行访问的时候是相对独立的,跟另外的客户端访问它是不相关的一件事情,但是物联网的需求设备之间是需要进行信息进行互通的,比如说我们的发布者和订阅者进行了数据的互通,但是网页访问的时候实际上它是可以简单的看成是多个阅读者去这个图书馆进行阅读的一个关系,相同的一本书可以多个阅读者,同时把一个网页同时打开,它们进行一个阅读。
比如说登录阿里云的时候,这里有一个超时登录,登录的时候,需要带登录数据。
点击登录之后是传给了外部服务器,外部服务器进行处理,就是刚刚相当于这个 PPT 里面把一个终端对服务器进行了启动服务器的响应,但是在这个请求里面它它是带了自己的数据给服务器,但是服务器是很难具备把它带过去的数据进行分发,如果用另外一个网页去访问相同的地址的话,实际上是很难获取其它的中断,另外一个浏览器去访问这个服务器带过去的这个数据,因为 HTTP 协议主要是这个请求跟响应的这么一个过程,而且请求的数据如果是携带客户端的数据,这个数据量是非常少的协议。
3、HTTP 是一种有许多标头和规则的重量级协议。http 协议比较重,url、head、content 都要携带很多内容,不适合传输能力比较弱的设备。它不适合低功耗、低处理能力、低带宽的网络。
它的协议是一个重量级的协议,它带有了很多的标图,还有规则也比较复杂,那些协议它比较重主要体现在它的协议携带的内容都很多,虽然包结构并不是很复杂,但是包里面包含的内容,每次访问的时候,其实都它的所需要的字符数是比较多的。比如访问一个地址的时候,那个UI而往往都会很长。那这些字符串如果由单片机去处理的话,就会变得非常消耗资源。
同时,HTTP 协议它的传输的过程是建立连接之后传完了之后就会关闭连接,所以如果传输一次消息,它的开销都很大,那它每次建立连接的过程的开销会在反复使用的过程中会叠加,这样每一次进行客户端与服务器通信的时候,开销都非常大。
客户端与服务器的 Http 协议过程是客户端建立连接并发送请求信息,服务器发送响应信息,客户端关闭与服务器的链接。
三、HTTP 协议产生背景
看到在互联网中间的一些数据,如果 HTTP 去实现这个的话,就有一点像一个访问窗口,访问的时候有中断方式和查询方式,如果强行的用 HTTP 去实现这个就有一点像查询方式去获取。结果这个代价就会非常大,开销也非常大,最后并不能达到预期的一个效果。所以在互联网时代到来之后,产生一个新的协议更符合这样一个网络结构和网络形态,需完成物联网和性的一个需求,这时候HTTP的协议就诞生了。
四、实例感受 HTTP 协议的过程和特点
服务器有一个配置文件,这个配置文件就是说明用浏览器来访问这个服务器的时候,服务器作为一个外部服务器,作为一个页面的服务器,怎样去提供这个服务。
首先进入 ETC 文件夹,可以直接切换 nginxx 的,里面有一个 nginx.CONS,把它打开看一下这个服务器的 nginx 配置是在这个文件,这个配置文件决定了什么?
首先监听80端口就是一个默认的这个服务器。第二个它的根目录就当访问着一个域名或者这个 IP 地址的时候,当访问没有没有后续的,没有后缀的,举个例子,比如说阿里云,当我访问这个地址的时候,它所呈现的一个服务器的存储的位置,被 ROOT 行指定。
服务器的地址里面有 404.html 50x.html index.html nginx-logo.png poweredby.png
访问这个地址的时候,就呈现了 HTML 文件,其中 HTML 文件指定了两个图片,它的访问过程,可以按F12点在works,那访问的过程的第一个返回来,这个强行发行一下,第一个返回了200,回答一个文件,这个文件就是HTML文件,点这个内容可以看到两个图片还有没找到的图标,404表示名字找到这三个属性都已经找到了文档图片,这两个图片都是包含在 Index 的,这就是一个访问的过程。
五、HTTP 的访问的流程
用一个抓包工具,可以自己在网上去下载,可以查看这个工具的使用方法,网上都很多,打开这个工具之后,就可以利用这个工具来监控开放接口,就是这样一个流程,首先这里现在是 WiFi 接入到选中的 WiFi 接口,需要关心想监控的这些内容,这里写一个原服务器 SRZ 原服务器的 IP 地址就是刚刚建的这个服务器的地址,配好了 IP 地址后点击这个按钮选择不保存,然后就在监控这个 IP 地址,然后强制刷新一下。
就找到了很多包,其实关掉那个占内存,可以看到发出的请求,右键点击,最终选择 HTTP6 ,这里就是把所有的跟这个服务器交互的 HTTP 都找到了,第一部分就是 HTTP 协议的一个请求,这里面有前面我说过的帧结构,请求协议许多类型协议类型 IP 地址等等,然后返回的内容,第一部分是 HTTP 返回的包,表示200已经找到,然后当前的服务器的版本一堆信息,然后就是返回的内容,下面的这个内容,可以看到跟网页上的 HTML 内容是保持一致的。
所以这个过程呢,首先是请求响应发送请求消息,然后一个关闭连接就直接就完成了这么一个过程,看不到关闭连接因为它自动就切断了。
第二个,从大量的篇幅来看申请一个很简单,如果是申请一个很简单的数据,这里的文件是比较大,比如说更换到一个文件,把这个删除然后按照 HTML 的格式写一个最简单的文件,定义成 Hello World ,然后保存,然后将这个文件这个文件上传到刚刚的文件夹,这个文件夹里面已经有 Index ,那再通过查询,然后再访问这个 IP 地址,就会出现写进去的 Hello World 。
再跟踪一下这个最简单的 HTML 返回的过程,选择先找到地址,现在跟踪一下这个IP地址数据流,强制刷新一下,所以之后可以看到一个 HTML2 返回的200,直接跟踪的 HTTP 可以看到现在返回的过程返回的内容就是刚刚写的这个内容。