HTTP 协议 版本详解
HTTP 协议 介绍<一>
简介
HTTP(Hypertext Transfer Protocol)是一种用于在客户端和服务器之间进行通信的协议。它是现代互联网中最常用的应用层协议之一。HTTP 的主要目的是实现超文本资源的传输,例如 HTML 文档、图像和音频文件等。
HTTP 使用客户端-服务器模型进行通信,其中客户端发送请求并等待服务器的响应。通常,客户端是 Web 浏览器,而服务器是存储和提供资源的计算机。HTTP 请求和响应是以文本形式进行传输,使用 TCP/IP 作为底层传输协议。
HTTP 介绍
HTTP 是一种应用层协议,它定义了客户端和服务器之间进行通信的规范。该规范记录在 IETF(Internet Engineering Task Force)的 RFC(Request for Comments)文档中。
HTTP 的规范描述了请求和响应的格式、方法、头部字段、状态码和其他各种参数。它定义了如何在客户端和服务器之间传输文本或二进制数据,并规定了数据的编码、压缩、缓存等方面的约定。
为了实际进行 HTTP 通信,需要编写符合规范的 HTTP 实现程序。这些实现程序在应用程序层运行,负责根据 HTTP 规范处理请求和生成响应。常见的 HTTP 实现程序包括 Web 服务器(如 Apache、Nginx)和客户端应用程序(如 Web 浏览器)。
这些实现程序根据 HTTP 的规范,通过建立 TCP 连接、发送请求、解析响应等步骤来实现 HTTP 通信。它们负责处理与底层的TCP/IP 传输无关的特定 HTTP 语义和行为。
因此可以说,HTTP 是一种协议规范,而实现这个规范的程序则是具体的 HTTP 实现。这些实现程序在应用层运行,负责处理 HTTP 通信的数据传输和相关业务逻辑。
HTTP版本
HTTP/0.9
最早的 HTTP 版本,于 1991 年引入,非常简单,只支持 GET 请求,响应只返回纯文本 HTML。
-
只支持 GET 请求:
- HTTP/0.9 仅支持一种请求方法,即 GET 方法。它用于从服务器获取指定 URL 的内容。
-
纯文本响应:
- HTTP/0.9 仅返回纯文本响应,通常是 HTML 格式。它没有定义响应头和状态码等元数据信息。
-
没有请求头和响应头:
- HTTP/0.9 请求中没有请求头部分,响应中也没有响应头部分。服务器只返回请求的内容,没有其他元数据。
-
无法处理复杂的内容类型:
- 由于 HTTP/0.9 仅支持纯文本 HTML 响应,因此无法处理其他复杂的内容类型,如图像、视频、CSS 和 JavaScript 等。
HTTP/0.9 是 HTTP 协议的基础,虽然非常简单,但它奠定了后续 HTTP 版本的基础。后续版本(如 HTTP/1.0、HTTP/1.1)引入了更多功能和复杂性,使得 HTTP 成为了现代 Web 应用中最基础和重要的协议之一。
HTTP/1.0:
于 1996 年引入,引入了多个新特性,如 POST 请求、响应状态码、请求头和响应头字段等。它是第一个得到广泛实现的 HTTP 版本。
-
请求方法的扩展:
- HTTP/1.0 引入了多个新的请求方法,如 POST、PUT、DELETE 等,以允许更多类型的操作。
-
响应状态码:
- HTTP/1.0 引入了三位数字的状态码,用于明确表示服务器对请求的处理结果,如 200(成功)、404(未找到)、500(服务器错误)等。
-
请求头和响应头:
- HTTP/1.0 引入了请求头(Request Headers)和响应头(Response Headers),用于在请求和响应中传递附加的元数据信息。
-
字节范围请求:
- HTTP/1.0 支持字节范围请求(Byte Range Requests),允许客户端只请求文件的一部分,而不是整个文件。这在下载大型文件和断点续传等场景中很有用。
-
缓存控制:
- HTTP/1.0 引入了缓存控制的机制,通过响应头部字段(如 Expires、Cache-Control)指定资源缓存的行为,减少网络传输和提高性能。
-
管道化请求:
- HTTP/1.0 支持管道化(Pipeline)请求,允许客户端在一个连接上发送多个请求,而无需等待相应的响应。这样可以提高多个请求的传输效率。
HTTP/1.0 在性能和功能方面相对于 HTTP/0.9 有了显著的改进,它为后续的 HTTP 版本打下了基础。然而,由于 HTTP/1.0 存在一些限制和性能瓶颈,后来发展出了更高效和功能丰富的 。
HTTP/1.1
于 1997 年引入,是最广泛使用的 HTTP 版本。HTTP/1.1 引入了持久连接、管道化(pipeline)请求、分块传输编码等特性,提高了性能和效率。
-
持久连接:
- HTTP/1.1 引入了持久连接(Persistent Connections),允许多个请求和响应在同一 TCP 连接上复用,避免了每次请求都需要重新建立连接的开销。
-
管道化请求:
- HTTP/1.1 对管道化(Pipeline)请求的支持更加规范化,允许客户端在一个连接上发送多个请求,而无需等待相应的响应。这提高了多个请求的传输效率。
-
分块传输编码:
- HTTP/1.1 引入了分块传输编码(Chunked Transfer Encoding),允许服务器将响应消息分成多个块进行传输。这样可以逐块发送响应,而不需要等待整个响应的生成。
-
支持压缩:
- HTTP/1.1 支持响应内容的压缩编码(如 gzip、deflate),减少了传输的数据量,提高了响应的速度。
-
范围请求:
- HTTP/1.1 扩展了对范围请求(Range Requests)的支持。客户端可以通过 Range 头部字段指定获取资源的特定范围,而不需要获取整个资源。
-
缓存控制:
- HTTP/1.1 引入了更多的缓存控制机制,如 Etag、Cache-Control、If-Modified-Since 等头部字段,允许更细粒度地控制缓存行为,提高性能和降低网络负载。
-
虚拟主机支持:
- HTTP/1.1 支持通过 Host 头部字段实现虚拟主机(Virtual Host)的支持。这使得在一个物理服务器上承载多个不同域名的网站成为可能。
HTTP/1.1 是对 HTTP/1.0 的重大改进,它在性能、可靠性和功能方面带来了许多改进。然而,由于多个资源串行下载和头阻塞等问题,HTTP/1.1 仍然存在一些性能瓶颈。
HTTP/2
于 2015 年引入,基于 Google 的 SPDY 协议。HTTP/2 提供了更快的传输速度和更高效的连接管理。它使用二进制编码而不是文本,支持多路复用、服务器推送等特性。
-
多路复用:
- HTTP/2 引入了多路复用(Multiplexing)机制,允许同时在单个连接上传输多个请求和响应。这避免了在传统的 HTTP/1.1 中进行串行请求的限制,提高了传输效率和性能。
-
二进制分帧层:
- HTTP/2 使用二进制分帧层(Binary Framing Layer),将请求和响应消息分成多个二进制帧进行传输。这使得服务器和客户端可以更容易地解析和处理消息,提高了通信的效率。
-
首部压缩:
- HTTP/2 引入了首部压缩(Header Compression)机制,压缩了传输的请求和响应头部,减少了数据的传输量。这大大减少了请求的开销,加快了页面加载速度。
-
服务器推送:
- HTTP/2 支持服务器推送(Server Push)机制,允许服务器在客户端请求之前主动将相关资源推送给客户端。这消除了客户端首先请求主页面,然后再请求相关资源的需求,提高了页面加载速度。
-
流量控制:
- HTTP/2 引入了流量控制(Flow Control)机制,允许接收方控制接收数据的速度,避免了流量过载和拥塞的问题。
-
数据传输优化:
- HTTP/2 优化了数据的传输方式,采用了二进制格式和压缩算法,减少了数据量和传输延迟。
-
安全性提升:
- 虽然 HTTP/2 本身并未引入新的安全特性,但由于大多数浏览器只支持通过加密的 HTTPS 协议使用 HTTP/2,因此它促进了 Web 的安全性普及。
HTTP/2 的目标是提供更快的连接建立和传输速度,改善了传统 HTTP/1.1 存在的性能瓶颈。它在 Web 应用程序中得到广泛支持,并被大多数现代浏览器和服务器所支持。
HTTP/3
是基于 QUIC(Quick UDP Internet Connections)协议的下一代 HTTP 版本,仍在开发中。HTTP/3 的目标是提供更快的连接建立和传输速度,尤其在高延迟和丢包的网络环境中表现更好。
-
基于 QUIC:
- HTTP/3 使用 QUIC 作为其底层传输协议,而不是使用 TCP。QUIC 具有更低的连接建立延迟和更好的拥塞控制,能够在高延迟和不稳定网络环境中提供更好的性能。
-
多路复用:
- 类似于 HTTP/2,HTTP/3 也支持多路复用,允许在单个连接上同时传输多个请求和响应。
-
集成加密:
- HTTP/3 要求使用加密的连接,因此使用 HTTPS 进行通信是必需的。这提高了数据传输的安全性和隐私性。
-
快速连接建立:
- QUIC 支持在传输层上实现快速连接建立,从而提供更低的往返时间(RTT)和更快的连接建立时间。
-
零往返时间的请求重连:
- HTTP/3 支持在客户端更改网络连接(从 Wi-Fi 切换到移动网络)时的零往返时间请求重连,减少了连接中断的影响。
-
减少头部延迟:
- HTTP/3 使用列表压缩机制来减少头部信息的传输大小,从而降低了传输延迟。
-
应对丢包和网络抖动:
- QUIC 具有更好的抗丢包和网络抖动的能力,通过使用前向纠错和拥塞控制算法来提高数据传输的可靠性。
HTTP/3 的目标是提供更快的连接建立和传输速度,特别是在高延迟和不稳定网络环境中。它是对 HTTP/2 的改进,旨在弥补 HTTP/2 在 TCP 上仍然存在的一些限制。
HTTP各版本的连接
HTTP(超文本传输协议)是一种用于客户端和服务器之间传输数据的协议。以下是各个版本的HTTP协议以及其连接管理的简要描述:
-
HTTP/1.0:
-
非持久连接:每次请求和响应都建立一个新的连接。
非持久连接是一种HTTP连接管理方式,它在每次请求和响应之间建立一个新的连接。也称为短连接或非持久连接。
在非持久连接中,每次客户端发送请求时,都需要与服务器建立一个新的TCP连接。完成请求和响应后,连接会立即关闭。这种连接管理方式需要进行握手和关闭连接的操作,会产生额外的网络开销。
在HTTP/1.0版本中,非持久连接是默认的连接管理方式。每个请求-响应周期都使用一个单独的连接。这种连接方式的主要缺点是,对于每个请求都需要进行建立连接和关闭连接的操作,导致一些额外的延迟。
-
无法复用连接:每个请求-响应周期都需要通过握手和关闭连接的方式进行,效率较低。
-
-
HTTP/1.1:
-
持久连接:单个TCP连接可以在多个请求和响应之间重复使用,减少了握手的开销。
持久连接是指在HTTP协议中,客户端和服务器之间可以重复使用单个TCP连接来传输多个请求和响应。与非持久连接(即每次请求和响应都建立一个新的连接)相比,持久连接可以减少握手的开销,提高性能和效率。
在持久连接中,当客户端发送一个请求到服务器,并收到响应后,TCP连接并不会立即关闭。而是保持打开状态,以便进一步的请求和响应传输。客户端可以在同一个连接上发送多个请求,而无需为每个请求都建立新的连接。服务器在收到请求后,会根据HTTP头部的信息来区分不同的请求。
持久连接的优点包括:
- 减少了每个请求的连接建立和关闭开销,提高了性能和效率。
- 减少了对网络资源的占用,尤其是在频繁的请求操作中。
- 允许服务器并发处理多个请求,提高了并发性和吞吐量。
-
管道化(Pipeline):允许客户端在不等待响应的情况下连续发送多个请求,提高性能。
管道化(Pipeline)是一种在HTTP协议中使用的方法,允许客户端在不等待响应的情况下连续发送多个请求,从而提高性能和效率。
使用管道化的持久连接(Pipeline Persistent Connection):
- 可以并行地发送多个请求,并且可以同时接收相应的响应。这样可以减少请求和响应之间的延迟,提高整体的吞吐量。
非管道化的持久连接(Non-Pipeline Persistent Connection):
- 它要求在发送一个请求之后等待其响应,然后再发送下一个请求。这种方式是顺序请求-响应,无法同时并行处理多个请求和响应,使得整体的性能和效率相对较低。
总结来说,管道化持久连接允许在不等待响应的情况下连续发送多个请求并同时接收相应的响应,适用于提高HTTP请求的性能和效率。
-
非阻塞:客户端可以发送多个请求而无需等待上一个请求的响应。
-
-
HTTP/2:
- 多路复用(Multiplexing):HTTP/2允许在单个连接上并行发送多个请求和响应,而不需要建立多个TCP连接。通过使用帧和流的机制,可以在同一个连接上同时发送和接收多个请求和响应。这样可以避免了建立和关闭多个连接的开销,提高网络的利用率和性能。
- 数据压缩(Header Compression):HTTP/2使用HPACK算法对请求和响应头进行压缩,减少了在网络上传输的数据量。通过动态维护和发送对应的头部字段表,可以显著减少冗余的头部数据,并提高传输效率。
- 服务器推送:服务器可以预测客户端需要的资源,并主动推送给客户端,提高效率。
这两个特性都是为了改善HTTP协议在性能和效率方面的问题而引入的。多路复用允许并行地发送请求和响应,提高了请求的响应时间和整体的吞吐量。数据压缩则减少了数据传输量,降低了网络开销。
-
HTTP/3:
-
基于UDP的协议(QUIC):使用UDP协议替代TCP协议,更快地建立连接和传输数据,降低延迟。
-
QUIC(全称为Quick UDP Internet Connections)是由Google开发的一种协议,旨在解决TCP的一些局限和性能问题。与TCP不同,QUIC在传输层直接建立在UDP之上,因此具有更低的连接建立延迟和更好的拥塞控制。
以下是QUIC协议的一些主要特点:
-
连接建立速度快:相对于TCP协议的三次握手,QUIC使用了0-RTT(零往返时间)握手的方式,可以更快地建立连接。这对于在线应用和移动设备的性能至关重要。
-
多路复用:类似于HTTP/2协议的特性,QUIC支持多路复用,可以在单个连接上同时传输多个请求和响应。这提高了吞吐量和性能,并减少了网络拥塞。
-
存储过程编程接口(API):QUIC提供了灵活的API,使得开发人员可以直接使用QUIC协议进行应用程序开发。
-
前向纠错(Forward Error Correction):QUIC具备前向纠错的功能,可以根据网络状况和丢包情况自动纠正数据错误,提高传输的可靠性。
-
安全性:QUIC内置了传输层安全性(TLS)协议,提供了端到端的数据加密和身份验证,保护数据的安全性。
需要注意的是,由于QUIC基于UDP,它在某些网络环境(如防火墙和代理服务器)中可能会受到限制或阻塞。然而,随着时间的推移,QUIC作为一种新兴的协议正在得到越来越多的支持和部署。
-
-
-
需要注意的是,HTTP的各个版本的连接特性可能在不同的浏览器和服务器之间有所差异。在实际使用中,建议根据具体情况参考相关文档和规范。
希望以上信息对您有所帮助,如果还有其他问题,请随时提问。
相关文章:
HTTP 协议 版本详解
HTTP 协议 介绍<一> 简介 HTTP(Hypertext Transfer Protocol)是一种用于在客户端和服务器之间进行通信的协议。它是现代互联网中最常用的应用层协议之一。HTTP 的主要目的是实现超文本资源的传输,例如 HTML 文档、图像和音频文件等。…...

PHP语言基础知识(超详细)
文章目录 前言第一章 PHP语言学习介绍 1.1 PHP部署安装环境1.2 PHP代码工具选择 第二章 PHP代码基本语法 2.1 PHP函数知识介绍2.2 PHP常量变量介绍 2.2.1 PHP变量知识:2.2.2 PHP常量知识: 2.3 PHP注释信息介绍2.4 PHP数据类型介绍 2.4.1 整形数据类型2.4…...

Flex弹性盒子的项目属性
最近在写项目时用到了弹性盒子的项目属性,记录一下,以后用到继续扩充 <div class"concern-data"><div><img src"https://meituan.thexxdd.cn/lvyou/assets/pinglun-fc62482a.svg" alt""><span>1&…...

广州银行信用卡中心:强化数字引擎安全,实现业务稳步增长
广州银行信用卡中心是全国城商行中仅有的两家信用卡专营机构之一,拥有从金融产品研发至销售及后期风险控制、客户服务完整业务链条,曾获“2016年度最佳创新信用卡银行”。 数字引擎驱动业务增长 安全左移降低开发风险 近年来,广州银行信用卡…...
【Rust日报】2023-08-03 - Polars 获约 400 万美元种子轮融资
文章:2023 年对 Rust 编译器 CI 的改进 kobzol 的新文章,介绍了关于优化 Rust 编译器构建、测试和性能监视基础设施的方案和实施情况。 根据作者的工作,文章内容分为三类: Rust 编译器(rustc)构建配置、 Ru…...

装修小程序,开启装修公司智能化服务的新时代
随着数字化时代的来临,装修小程序成为提升服务质量和效率的关键工具。装修小程序旨在为装修公司提供数字化赋能、提高客户满意度的智慧装修平台。通过装修小程序,装修公司能够与客户进行在线沟通、展示设计方案、提高服务满意度等操作。 装修小程序的好处…...
使用PHP和Redis实现简单秒杀功能
安装Redis 首先,需要在服务器上安装Redis。如果使用Linux系统,可以使用命令行安装。如果使用Windows系统,可以下载并安装Redis二进制文件。 创建Redis连接 在PHP中,可以使用Redis扩展来连接Redis服务器。需要在PHP文件中包含Re…...
C#开发FFMPEG例子(API方式) FFmpeg拉取udp组播流并播放
代码及工程见https://download.csdn.net/download/daqinzl/88168680 开发工具:visual studio 2019 网上用C/C调用FFmpeg的API例子很多, c#使用ffmpeg.autogen的方式很简单,直接复制C/C调用FFmpeg的API的代码到C#中,然后在FFmpeg…...

Android性能优化—图片优化
图片优化是内存优化中很重要的一部分,加载Bitmap时往往需要消耗大量的内存,稍不注意就容易导致内存溢出(OOM)。 一、图片OOM问题产生 1、 一个页面一次加载过多图片; 2、加载大图片没有进行压缩(尺寸,质…...

如何搭建自动化测试框架?资深测试整理的PO模式,一套打通自动化...
目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 Po模型介绍 1、简…...

软件外包开发的GO语言特点
Go语言(也称为Golang)是由Google开发的一种编程语言。它具有许多特点,使其成为许多项目范围的优秀选择。Go语言适用于需要高性能、并发和简洁易读的项目,特别是面向网络和分布式应用的项目。今天和大家分享项目的特点及适用的项目…...

【深度学习Week4】MobileNet_ShuffleNet
报错:unsafe legacy renegotiation disabled 解决方案: 尝试了更换cryptography36.0.2版本,以及更换下载链接的方法,都不行,最后采用了手动下载mat文件并上传到colab的方法 高光谱图像分类数据集简介Indian Pines&…...

649. Dota2 参议院
题目描述: 主要思路: 这是一个按照题意模拟的问题,利用队列模拟议员的投票顺序即可。 class Solution { public:string predictPartyVictory(string senate) {queue<int> r,d;int nsenate.length();for(int i0;i<n;i){if(senate[i…...

无人机管控平台,推动电力巡检管理水平提升
各地区无人机作业水平和管理水平存在参差不齐,电力巡检管理要求与业务发展水平不匹配的问题。同时,巡检数据的存储和管理分散,缺乏有效的整合与共享手段,使得内外业脱节,没有形成统一应用和闭环管理。这就导致巡检数据…...

阿里云平台WoSignSSL证书应用案例
沃通CA与阿里云达成合作并在阿里云平台上线WoSign品牌SSL证书。自上线以来,WoSignSSL证书成为阿里云“数字证书管理服务”热销证书产品,获得阿里云平台客户认可,助力阿里云平台政府、金融、教育、供应链、游戏等各类行业客户实现网站系统数据…...

服务器时钟同步
服务器时钟同步 文章目录 服务器时钟同步背景windows时钟同步Linux机器上的时钟同步Centos时钟同步Ubuntu系统时钟同步 查看是否同步的命令 背景 运维,XXX服务器慢了2秒,导致XXX业务没有正常执行,请立即排查为啥会有时钟不同步的问题。 首先…...

AMEYA360:瑞萨电子MCU和MPU产品线将支持Microsoft Visual Studio Code
全球半导体解决方案供应商瑞萨电子宣布其客户现可以使用Microsoft Visual Studio Code(VS Code)开发瑞萨全系列微控制器(MCU)和微处理器(MPU)。瑞萨已为其所有嵌入式处理器开发了工具扩展,并将其…...

JSP--Java的服务器页面
jsp是什么? jsp的全称是Java server pages,翻译过来就是java的服务器页面。 jsp有什么作用? jsp的主要作用是代替Servlet程序回传html页面的数据,因为Servlet程序回传html页面数据是一件非常繁琐的事情,开发成本和维护成本都非常高…...

07 Ubuntu中使用poetry工具管理python环境——巨详细!!!
由于conda和ros2的环境实在太容易冲突了。我真的不敢再使用conda,着实是有些搞不明白这解释器之间的关系。 conda的卸载和ros2的安装暂不赘述,下面着重来说如何在Ubuntu中使用poetry进行包管理及遇到的问题。 1 安装poetry 由于在有写入权限的限制&am…...
射影平面 与 射影变换
射影平面 与 射影变换 射影平面 与 齐次坐标 中心为O 的把 将与一个点O 关联的所有平面和直线构成的集合称为 中心为O的把O[\lambda, p]射影(从平面\pi 到把O的一个对应关系)O[P, l] [OP, OL] ...截影(从把O 到平面\pi 的一个对应关系&…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...

【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...

优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...

C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...

STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...

【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...