深度解析应用层协议-----HTTP与MQTT(涵盖Paho库)

news2025/2/22 21:05:59

HTTP协议概述

1.1 HTTP的基本概念

HTTP是一种应用层协议,使用TCP作为传输层协议,默认端口是80,基于请求和响应的方式,即客户端发起请求,服务器响应请求并返回数据(HTML,JSON)。在HTTP/1.1中,使用了长连接技术,允许一个连接复用多个请求和响应,减少了TCP三次握手的消耗。

1.2 HTTP的基本结构

HTTP请求部分:
  • 请求行:包含请求方法(GET, POST等)、请求URL、协议版本。
    • GET:请求资源,通常用于获取数据。
    • POST:提交数据,用于发送数据到服务器进行处理。
    • PUT:更新数据,用于上传或修改资源。
    • DELETE删除资源。
    • URL:资源标识符,表示请求的资源地址,包含协议、主机名、路径、查询参数等
  • 请求头:包括各种元数据,如Connection、Host、Content-Type等。
    • Content-Type:指示请求体的数据类型,通常在POST或PUT请求中使用(例如Content-Type: application/json)。
    • Host:指定请求的主机名和端口号,必需字段
    • Connection:指定控制连接的方式(例如keep-alive表示保持连接)
  • 空行:标识头部与载荷的分界线,如果没有空行会发送TCP粘包,strstr解析/r/n获得载荷
  • 请求体:通常在POST请求中出现,包含请求的具体数据。 
    • 对于GET请求,通常不携带请求体。GET请求的数据是通过URL中的查询参数传递的,例如:GET /path/to/resource?name=John&age=30 HTTP/1.1

完整的HTTP请求示例

POST /submit HTTP/1.1

Host: www.example.com
Content-Type: application/json
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Accept: application/json

{
  "username": "test_user",
  "password": "test_pass"
}
HTTP响应部分:
  • 响应行:包括协议版本、状态码(200,404,500)、状态描述(OK,not found,sever error)。
  • 响应头:包含响应的元数据,如Content-Type、Content-Length等。
    • Content-Type:指定响应体的内容类型,例如text/htmlapplication/json等。
    • Content-Length:指定响应体的长度(字节数)。
  • 空行:/r/n,头部和内容的分隔
  • 响应体:包含实际的返回数据,对于GET请求,响应体通常是请求的资源(如HTML、JSON、图像等)。对于POST请求,响应体可能包含处理结果或其他数据。

完整的HTTP响应示例

HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 112
Date: Tue, 21 Mar 2023 10:10:00 GMT
Server: Apache/2.4.1

<html>
  <body>
    <h1>Welcome to the website</h1>
  </body>
</html>

1.3 HTTP的局限性

  • 无状态性:HTTP是无状态协议,每次请求都是独立的,不会记录上一次请求的任何信息,如果需要记录用户状态,需要额外机制如:
    • Cookies:浏览器在发送请求时,可以携带上次访问时服务器存储的Cookies(小型文本数据),服务器通过这些Cookies来识别用户的身份或维持会话状态。
  • 高开销:每次请求都需要建立TCP连接,导致网络开销较大,尤其在频繁请求的场景下。
  • 实时性差:HTTP通常是客户端主动发起请求,服务器无法主动推送数据。

HTTP可以传哪些数据?

  • 文本数据(如HTML、JSON、XML等)
  • 二进制数据(如图片、音频、视频、PDF等)

MQTT协议概述

2.1 MQTT的基本概念

MQTT是一种轻量级的、基于发布/订阅模式的消息传输协议,使用TCP协议进行传输,端口为1883(非加密)和8883(加密),客户端通过发布(Publish)消息到某个主题(Topic),而其他订阅(Subscribe)该主题的客户端会接收到消息。

2.2 MQTT的基本结构

MQTT协议的消息主要包括以下内容:

  • 主题(Topic):消息的标签,决定了消息的去向。订阅者根据主题来接收消息。
  • QoS(Quality of Service)级别:决定消息传输的可靠性。MQTT支持三个级别的QoS:
    • QoS 0:最多一次发送,不保证消息送达。
    • QoS 1:至少一次发送,确保消息至少送达一次。
    • QoS 2:只有一次发送,确保消息只送达一次。
  • 保留标志:用于确保客户端在订阅时能接收到最后一条消息。

MQTT报文格式

MQTT报文格式具有简洁、高效的特点,主要由固定报文头可变报文头有效载荷(Payload)三部分组成。

固定报文头(Fixed Header)

固定报文头是每个MQTT报文的基本部分,长度是固定的,始终包含报文类型(Message Type)和报文标志(Flags)。

2.1 报文类型(Message Type)

MQTT定义了不同类型的报文,报文类型都由低四位表示

报文类型描述说明
1(0001)CONNECT客户端连接到服务器
2CONNACK服务器确认客户端连接
3PUBLISH发布消息
8SUBSCRIBE订阅请求

可变报文头(Variable Header)

可变报文头的内容依赖于报文类型,某些类型的报文没有可变报文头。一般来说,可变报文头部分包括协议版本号连接标志客户端ID订阅主题等信息。

3.1 CONNECT报文的可变报文头
  • 协议名称MQTT
  • 协议版本:当前版本一般是4(即MQTT 3.1.1)
  • Keep Alive:心跳间隔时间,单位为秒。
  • 客户端ID:用于标识客户端的唯一标识符。
3.2 PUBLISH报文的可变报文头
  • 主题名(Topic):消息的目标主题,用于订阅者筛选消息。
  • 消息标识符(Message Identifier):如果QoS > 0,则会有消息标识符,用于确认消息的投递状态。

有效载荷(Payload)

有效载荷部分就是实际传递的数据内容,报文的有效载荷内容根据报文类型而不同。比如:

  • PUBLISH报文的有效载荷包含消息体(即客户端发布的消息内容)。
  • CONNECT报文的有效载荷包含用户名、密码、客户端ID等连接信息。

MQTT Paho库概述、使用方法、API函数

Paho的设计目标是简化MQTT客户端的实现,提供易于使用的API,使开发者能够专注于业务逻辑而不需要深入理解MQTT协议的细节。

  • MQTTClient_create:创建一个MQTT客户端实例,指定代理的URI和客户端ID。
  • MQTTClient_connect:连接到MQTT代理,使用连接选项配置(如用户名、密码等)。
  • MQTTClient_publish:向指定主题发布消息,可以指定消息的QoS、保留标志等。
  • MQTTClient_subscribe:订阅一个主题,接收该主题的消息。
  • MQTTClient_unsubscribe:取消订阅主题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2301984.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WordPress“更新失败,响应不是有效的JSON响应”问题的修复

在使用WordPress搭建网站时&#xff0c;许多人在编辑或更新文章时&#xff0c;可能会遇到一个提示框&#xff0c;显示“更新失败&#xff0c;响应不是有效的JSON响应”。这个提示信息对于不了解技术细节的用户来说&#xff0c;太难懂。其实&#xff0c;这个问题并不复杂&#x…

【开源】思维导图:思绪思维导图 (Simple Mind Map)

目录 1. 思绪思维导图 2. 本地使用 3. 在线网页 1. 思绪思维导图 思绪思维导图&#xff0c;英文名称为Simple mind map&#xff0c;简称为SSM。 开源、免费 GitHub网址 支持多平台&#xff1a;Windows&#xff0c;Mac和Linux 支持在线和离线使用 2. 本地使用 安装包下载地址…

国产编辑器EverEdit -告别东找西找!一键打开当前文件所在目录!

1 文件操作 2 应用场景 在文件编辑过程中&#xff0c;有时需要对文件进行一些操作&#xff0c;比如&#xff1a;在命令窗口输入文件路径、文件名&#xff0c;进入到文件目录&#xff0c;对文件进行压缩等&#xff0c;如果没有直达命令&#xff0c;用户需要通过文件管理器找到目…

UE引擎游戏加固方案解析

据VGinsights的报告&#xff0c;近年来UE引擎在过去几年中市场占比显著增长&#xff0c;其中亚洲市场增幅达到了30%&#xff0c;随着UE5的推出和技术的不断进步&#xff0c;UE引擎在独立开发者和移动游戏开发中的应用也在逐步增加。 UE引擎的优势在于强大的画面表现与视觉特效…

[kubelet-check] It seems like the kubelet isn‘t running or healthy.

执行k8s时报错&#xff1a; [kubelet-check] It seems like the kubelet isn’t running or healthy. [kubelet-check] The HTTP call equal to ‘curl -sSL http://localhost:10248/healthz’ failed with error: Get "http://localhost:10248/heal ** 解决办法如下&a…

C# 背景 透明 抗锯齿 (效果完美)

主要是通过 P/Invoke 技术调用 Windows API 函数 gdi32.dll/user32.dll&#xff0c;同时定义了一些结构体来配合这些 API 函数的使用&#xff0c;常用于处理图形绘制、窗口显示等操作。 运行查看效果 局部放大&#xff0c;抗锯齿效果很不错,尾巴毛毛清晰可见。 using System; u…

关于uniApp的面试题及其答案解析

我的血液里流淌着战意&#xff01;力量与智慧指引着我&#xff01; 文章目录 1. 什么是uniApp&#xff1f;2. uniApp与原生小程序开发有什么区别&#xff1f;3. 如何使用uniApp实现条件编译&#xff1f;4. uniApp支持哪些平台&#xff0c;各有什么特点&#xff1f;5. 在uniApp中…

【Java场景题】MySQL死锁排查

大家好&#xff0c;今天XiXi给大家分享一个MySQL死锁排查的实验&#xff0c;文章主要有&#xff1a; 通过show engine innodb status&#xff0c;查看最近一次死锁信息开启innodb_print_all_deadlocks&#xff0c;在错误日志中能够记录所有死锁信息通过解析binlog日志定位死锁…

LabVIEW心音信号采集与分析系统

基于LabVIEW软件的心音信号采集与分析系统能够实现心音的采集、去噪和分析。系统利用LabVIEW的强大功能和灵活性&#xff0c;通过模块化设计&#xff0c;实现了心音信号的高效处理和分析&#xff0c;具备深度学习和身份识别的实验能力&#xff0c;适用于医学和生物工程领域的研…

【Scrapy】Scrapy教程7——存储数据

上一节我们对爬虫程序的默认回调函数parse做了改写,提取的数据可以在Scrapy的日志中打印出来了,光打印肯定是不行的,还需要把数据存储,数据可以存到文件,也可以存到数据库,我们一一来看。 存储数据到文件 首先我们看看如何将数据存储到文件,在讲[[【Scrapy】Scrapy教程…

基础入门-算法解密散列对称非对称字典碰撞前后端逆向MD5AESDESRSA

知识点&#xff1a; 0、算法类型-单向散列&对称性&非对称性 1、算法识别加解密-MD5&AES&DES&RSA 2、解密条件寻找-逻辑特征&源码中&JS分析 应用场景&#xff1a; 1、发送数据的时候自动将数据加密发送&#xff08;只需加密即可&#xff09; 安全…

在UBUNTU下搭建Deepseek

在UBUNTU下搭建Deepseek 一、安装UBUNTU 这个就不多说了&#xff0c;无外乎下载UBUNTU的iso&#xff0c;然后用UltraIso制作U盘&#xff0c;然后重启设置启动盘&#xff0c;安装… 二、安装Ollama curl -sSfL https://ollama.com/install.sh | sh这里可能需要你先安装curl工…

O1 Embedder:让检索器思考后再行动

25年2月来自中科大和北京智源研究院的论文“O1 Embedder: Let Retrievers Think Before Action”。 大语言模型 (LLM) 的功能日益强大&#xff0c;彻底改变人们获取和利用信息的方式。值得注意的是&#xff0c;LLM 擅长执行细粒度数据表示&#xff0c;这有助于精确检索信息。它…

Ubuntu系统3分钟本地部署DeepSeek-R1蒸馏模型,支持联网

本文提供Ubuntu ollama Page Assist&#xff0c;3步快速安装DeepSeek-R1蒸馏模型&#xff0c;支持联网&#xff0c;支持API。 目录 DeepSeek-R1安装分3步&#xff1a; Step 1, 安装ollama&#xff08;已安装可忽略&#xff09; Step 2, 下载DeepSeek-R1模型 Step 3, 从…

谷粒商城—分布式高级②.md

认证服务 1. 环境搭建 创建gulimall-auth-server模块,导依赖,引入login.html和reg.html,并把静态资源放到nginx的static目录下 2. 注册功能 (1) 验证码倒计时 //点击发送验证码按钮触发下面函数 $("#sendCode").click(function () {//如果有disabled,说明最近…

C语言-----操作符的分类

1. 操作符的分类 •算术操作符&#xff1a; 、- 、 * 、/、% 移位操作符:<< >> 位操作符: & | ^ 赋值操作符: / 、 % 、 、- 、 *、/、 %、 <<、 >>、&、| 、 ^ 单⽬操作符&#xff1a;&#xff01;、 、- 、 & 、 * 、 、 …

PWM(脉宽调制)技术详解:从基础到应用实践示例

PWM&#xff08;脉宽调制&#xff09;技术详解&#xff1a;从基础到应用实践示例 目录 PWM&#xff08;脉宽调制&#xff09;技术详解&#xff1a;从基础到应用实践示例学前思考&#xff1a;一、PWM概述二、PWM的基本原理三、PWM的应用场景四、PWM的硬件配置与使用五、PWM的编程…

AI智能成长系统 | 应用探讨研究

研究背景 在现代家庭中&#xff0c;三岁宝宝的成长环境日益复杂。由于宝宝每天接触的人群多样&#xff0c;包括家庭成员、同龄小朋友以及可能的陌生人&#xff0c;其语言环境也相应地变得复杂多变。这种环境下&#xff0c;宝宝很容易接触到一些不适宜的语言&#xff0c;即俗称…

java 网络安全感知 网络安全学java

&#x1f345; 点击文末小卡片 &#xff0c;免费获取网络安全全套资料&#xff0c;资料在手&#xff0c;涨薪更快 实验五 java网络编程及安全 实验内容 1&#xff0e;掌握Socket程序的编写&#xff1b;2&#xff0e;掌握密码技术的使用&#xff1b;3&#xff0e;设计安全传输…

VisionMaster4.4 python脚本 图像处理 转换函数 爱之初体验

最近有接触过一丢丢VM4.3的模块开发. 一直有把python图像处理部分模块移植进来的打算 不过时间不够没来得及折腾.偶尔发现4.4支持py脚本 于是拿来折腾.一下午. 发现4.4支持python脚本,好开心. 首先安装VM4.4 注意一定要是4.4 打开后拖了一个模块. 但是发现import numpy imp…