HTTP进化史:从HTTP1的简单到HTTP3的强大

在这里插入图片描述

文章目录

  • 📈I. HTTP1
    • ⚡A. 基本特点
    • ⚡B. 特点
    • ⚡C. 优缺点
  • 📈II. HTTP2
    • ⚡A. 基本特点
    • ⚡B. 特点
    • ⚡C. 优缺点
  • 📈III. HTTP3
    • ⚡A. 基本特点
    • ⚡B. 特点
    • ⚡C. 优缺点
  • 📈IV. 总结
  • 📈附录:「简历必备」前后端实战项目(推荐:⭐️⭐️⭐️⭐️⭐️)

📈「作者简介」:前端开发工程师 | 蓝桥云课签约作者 | 技术日更博主 | 已过四六级
📚「个人主页」:阿珊和她的猫
🕐「简历必备」前后端实战项目(推荐:⭐️⭐️⭐️⭐️⭐️)

  • Vue.js 和 Egg.js 开发企业级健康管理项目
  • 带你从入门到实战全面掌握 uni-app

📈I. HTTP1

⚡A. 基本特点

  1. 请求-响应模型
  2. 无状态协议
  3. 明文传输

⚡B. 特点

  1. 使用明文传输,不加密
  2. 阻塞式连接,每次请求需要建立和关闭连接
  3. 每个请求使用一个独立的 TCP 连接
  4. 不支持请求和响应的多路复用
  5. 头部信息冗余,每个请求都包含完整的头部

⚡C. 优缺点

  1. 优点:简单、易于理解和实现
  2. 缺点:性能较差,不适合处理大量并发请求和高负载情况

以下是一个使用HTTP/1的简单案例:

假设你有一个网站,想要在用户请求时返回一段文本内容。你可以通过HTTP/1协议来实现。

首先,你需要一个能够监听HTTP请求的服务器。可以使用Python中的http.server模块来创建一个简单的HTTP服务器。

# server.pyfrom http.server import BaseHTTPRequestHandler, HTTPServerclass MyHTTPRequestHandler(BaseHTTPRequestHandler):def do_GET(self):self.send_response(200)  # 设置响应状态码为200self.send_header('Content-type', 'text/plain')  # 设置响应头部的Content-type字段self.end_headers()response = "Hello, World!"  # 定义要返回的文本内容self.wfile.write(response.encode())  # 将文本内容作为响应发送给客户端def run():server_address = ('', 8000)  # 服务器监听的地址和端口httpd = HTTPServer(server_address, MyHTTPRequestHandler)print('Starting server...')httpd.serve_forever()if __name__ == '__main__':run()

保存上述代码为server.py,然后运行该文件启动服务器。

接下来,打开浏览器,在地址栏中输入http://localhost:8000,并发送GET请求。服务器将返回一段文本内容"Hello, World!"作为响应。

这个例子中,我们创建了一个自定义的MyHTTPRequestHandler类,继承自BaseHTTPRequestHandler,用于处理HTTP请求。在do_GET方法中,我们设置了响应状态码为200,添加了Content-type响应头部字段,并发送了文本内容作为响应。最后,我们使用http.server.HTTPServer来创建服务器并持续监听请求。

注意:这只是一个简单的HTTP/1案例,实际应用中可能需要处理更多复杂的请求和响应操作。

📈II. HTTP2

⚡A. 基本特点

  1. 二进制传输
  2. 多路复用
  3. 请求优先级

⚡B. 特点

  1. 使用二进制格式传输,减少了数据大小
  2. 引入了多路复用,通过一个 TCP 连接并发处理多个请求
  3. 支持请求和响应的优先级设置
  4. 头部压缩,减少了请求头部的冗余数据
  5. 支持服务器推送,提前发送客户端可能需要的资源

⚡C. 优缺点

  1. 优点:性能提升,减少了延迟和带宽消耗
  2. 缺点:复杂度较高,对服务器资源要求较高

以下是一个使用HTTP/2的简单案例:

假设你有一个网站,你想要在用户请求时返回一张图片。你可以使用HTTP/2协议来实现。

首先,你需要一个支持HTTP/2的服务器。Nginx是一个常用的Web服务器,它可以配置为支持HTTP/2。

  1. 首先,安装并启动Nginx。具体的安装方法可以参考Nginx的官方文档。

  2. 配置Nginx以支持HTTP/2。打开Nginx的配置文件,一般位于/etc/nginx/nginx.conf。找到http块,并添加以下内容:

    http {# 其他配置项...server {listen 443 ssl http2;  # 监听443端口并启用HTTP/2ssl_certificate /path/to/certificate.crt;  # SSL证书路径ssl_certificate_key /path/to/private.key;  # SSL私钥路径location / {root /path/to/website;  # 网站根目录index index.html;}}# 其他配置项...
    }
    

    注意替换/path/to/certificate.crt/path/to/private.key为你的SSL证书和私钥的实际路径。同时,将/path/to/website替换为你的网站文件的实际路径。

  3. 保存并关闭Nginx的配置文件。

  4. 启动或重新加载Nginx服务,使配置生效。

  5. 在网站根目录下创建一个名为index.html的文件,并在其中插入一张图片的标签。

    <html>
    <head><title>HTTP/2 Demo</title>
    </head>
    <body><img src="path/to/image.jpg" alt="Image">
    </body>
    </html>
    

    path/to/image.jpg替换为你的图片文件的实际路径。

  6. 打开浏览器,输入你的网站地址(使用HTTPS协议),例如https://example.com。浏览器将使用HTTP/2协议请求你的网站,并将返回的数据进行解析和渲染。图片将在浏览器中显示出来。

这个例子中,我们使用Nginx作为服务器,并配置其支持HTTP/2。然后,在网站根目录下创建了一个HTML文件,其中包含了一张图片。当浏览器访问网站时,它会使用HTTP/2协议请求图片并渲染到页面上。

注意:这只是一个简单的HTTP/2案例,实际应用中可能需要处理更多复杂的请求和响应操作,以及其他HTTP/2提供的特性。

📈III. HTTP3

⚡A. 基本特点

  1. 使用 QUIC 协议
  2. 数据加密传输
  3. 完善的拥塞控制机制

⚡B. 特点

  1. 使用 QUIC(Quick UDP Internet Connections)协议取代 TCP
  2. 引入了数据加密,增强了安全性
  3. 改进的拥塞控制机制,提高网络传输性能
  4. 提供更好的流量多路复用和请求优先级管理

⚡C. 优缺点

  1. 优点:低延迟、更好的可靠性和安全性
  2. 缺点:较新的协议,兼容性和部署仍在发展中

📈IV. 总结

HTTP1、HTTP2 和 HTTP3 在性能、功能和安全性方面有明显的区别。

HTTP1 简单易用,但性能较差;
HTTP2 引入多路复用等机制提升了性能,但复杂度较高;
HTTP3 使用 QUIC 协议,提供更低延迟和更好的安全性,但兼容性仍在发展中。

以下是对HTTP/1.1、HTTP/2和HTTP/3的比较总结:

特点HTTP/1.1HTTP/2HTTP/3
协议类型文本协议二进制协议二进制协议
连接复用不支持支持支持
多路复用不支持支持支持
传输效率较低,由于串行传输较高,通过并行传输提升性能较高,通过并行传输提升性能
请求优先级不支持支持支持
首部压缩不支持支持支持
安全性无默认加密无默认加密默认加密(基于QUIC)
错误处理阻塞式非阻塞式,能在一个帧出错时继续解析后续帧非阻塞式,能在一个帧出错时继续解析后续帧

需要注意的是,HTTP/3是基于QUIC协议的,并且仍然处于实验阶段。此表格总结的是这三个版本的一般特性,实际应用中还可能有其他方面的差异和特点。

选择适合的协议取决于应用场景和需求。

📈附录:「简历必备」前后端实战项目(推荐:⭐️⭐️⭐️⭐️⭐️)

Vue.js 和 Egg.js 开发企业级健康管理项目
带你从入门到实战全面掌握 uni-app

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

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

相关文章

[RK3568] AMP架构

Rockchip 平台异构多系统 AMP&#xff08;非对称多核架构&#xff09;的开发软件包&#xff0c;支持 Linux(Kernel-4.19)、 Baremetal(HAL)、RTOS(RT-Thread) 组合AMP构建形式。 Baremetal(HAL) Baremetal表示裸机操作系统&#xff0c;HAL是裸机操作系统的一种。 裸机嵌入式系…

MySQL不适合创建索引的7种情况

1. 在where中使用不到的字段&#xff0c;不要设置索引 WHERE条件&#xff08;包括order by &#xff0c;group by&#xff09; 2. 数据量小的表最好不要使用索引 表记录太少&#xff0c;比如少于1000个&#xff0c;创建索引会先查索引&#xff0c;再回表&#xff0c;查询花费…

Git 常用命令

Git操作 克隆远程仓库到本地 # Git初始化&#xff08;仅一次使用的适合需要设置&#xff09; git config --global user.name "用户名" git config --global user.email "邮箱账号"# 朴实无华的拉取 git clone <url>分支 # 查看分支 git branch # …

Puppeteer 使用教程-实战篇(爬取图片、视频、音频,页面数据)

目录 前言 一、 获取实体店铺信息 二、 获取全国各省市县地图json数据 三、 cookies 四、 获取网络图片、视频资源 五、 自动化测试 总结 前言 续上篇&#xff0c;我们简单讲述一下puppeteer常见的应用场景&#xff0c;包括静态页面数据获取&#xff0c;网络请求获取截取…

第 5 章 Spark Shuffle 解析

第 5 章 Spark Shuffle 解析 5.1 Shuffle 的核心要点1. 数据分区&#xff1a;2.数据传输&#xff1a;3. 数据排序&#xff1a;4.数据聚合&#xff1a;5. 数据重分发&#xff1a;6.数据持久化&#xff1a;5.1.1 ShuffleMapStage 与 ResultStage 5.2 HashShuffle 解析5.2.1 未优化…

Appium python 框架

目录 前言 流程 结构 具体说说 run.py 思路 其他模块 前言 Appium是一个开源的移动应用自动化测试框架&#xff0c;它允许开发人员使用多种编程语言&#xff08;包括Python&#xff09;来编写自动化测试脚本。Appium框架提供了一套API和工具&#xff0c;可以与移动设备进…

基于单片机语音识别智能家居系统的设计与实现

功能介绍 以STM32单片机作为主控系统&#xff1b;液晶显示当前环境温湿度&#xff0c;用电器开关状态通过语音模块识别设定的语音&#xff1b;DHT11进行环境温湿度采集&#xff1b;通过语音播报模块报当前温湿度&#xff0c;智能回复通过语音识别可以打开灯&#xff0c;窗帘&am…

C语言-排序,初识指针

目录 【1】冒泡排序&#xff08;从小到大&#xff09; 【2】选择排序 【3】二维数组 【4】指针 【5】指针修饰 【6】大小端 【7】初见二级指针 练习&#xff1a; 【1】冒泡排序&#xff08;从小到大&#xff09; #include <stdio.h> //数组哪里的\0?自己和字符串…

Flink 在新能源场站运维的应用

摘要&#xff1a;本文整理自中南电力设计院工程师、注册测绘师姚远&#xff0c;在 Flink Forward Asia 2022 行业案例专场的分享。本篇内容主要分为四个部分&#xff1a; 建设背景 技术架构 应用落地 后续及其他 点击查看原文视频 & 演讲PPT 一、建设背景 建设背景主要…

Yalmip入门教程(3)-约束条件的定义

博客中所有内容均来源于自己学习过程中积累的经验以及对yalmip官方文档的翻译&#xff1a;https://yalmip.github.io/tutorials/ 之前的博客简单介绍了约束条件的定义方法&#xff0c;接下来将对其进行详细介绍。 首先简单复习一下&#xff1a; 1.定义约束条件可以使用矩阵拼接…

GRE和MGRE

目录 GRE GRE环境的搭建 MGRE MGRE的配置 MGRE环境下的RIP网络 MGRE实验 VPN 说到GRE&#xff0c;我们先来说个大家熟悉一点的&#xff0c;那就是VPN技术。 背景需求 企业、组织、商家等对专用网有强大的需求。 高性能、高速度和高安全性是专用网明显的优势。 物理专…

Notepad++ 配置python虚拟环境(Anaconda)

Notepad配置python运行环境步骤&#xff1a; 打开Notepad ->”运行”菜单->”运行”按钮在弹出的窗口内输入以下命令&#xff1a; 我的conda中存在虚拟环境 (1) base (2) pytorch_gpu 添加base环境至Notepad中 cmd /k chdir /d $(CURRENT_DIRECTORY) & call cond…

TX Barcode .NET for WPF Crack

TX Barcode .NET for WPF Crack 用于WPF软件的TX Barcode.NET包括一天完成的功能以及用于WPF的软件的2D条形码控制。 用于WPF的TX Barcode.NET的功能和属性&#xff1a; 它具有以下特性和属性&#xff0c;如&#xff1a; 常见的文字处理功能&#xff1a;它可以为用户和开发人员…

FastEdit ⚡:在10秒内编辑大型语言模型

概述&#xff1a; 这个仓库旨在通过一个单一的命令&#xff0c;有效地将新鲜且定制化的知识注入到大型语言模型中&#xff0c;以辅助开发人员的工作。 支持的模型&#xff1a;○ GPT-J (6B)○ LLaMA (7B/13B)○ BLOOM (7.1B)○ Falcon (7B)○ Baichuan (7B/13B)○ InternLM (7…

stable diffusion windows本地搭建的坑

刚刚2小时前&#xff0c;我搭好了&#xff0c;欣喜若狂&#xff0c;开放端口&#xff0c;同事也尝试了。我的配置 16G内存&#xff0c;AMD卡&#xff0c;有gpu但是没有用。这里不说具体步骤&#xff0c;只说坑点。 首先就是安装gfpgan、clip、openclip问题&#xff0c;我参考…

Kind | Kubernetes in Docker 把k8s装进docker!

有点像杰克船长的黑珍珠 目录 零、说明 一、安装 安装 Docker 安装 kubectl 安装 kind 二、创建/切换/删除集群 创建 切换 删除 将镜像加载到 kind 群集中 零、说明 官网&#xff1a;kind Kind&#xff1a; Kubernetes in Docker 的简称。kind 是一个使用 Docker 容…

CentOS5678 repo源 地址 阿里云开源镜像站

CentOS5678 repo 地址 阿里云开源镜像站 https://mirrors.aliyun.com/repo/ CentOS-5.repo https://mirrors.aliyun.com/repo/Centos-5.repo [base] nameCentOS-$releasever - Base - mirrors.aliyun.com failovermethodpriority baseurlhttp://mirrors.aliyun.com/centos/$r…

数据仓库建设-数仓分层

数据仓库能够帮助企业做出更好的决策&#xff0c;提高业务效率和效益&#xff1b;在数据仓库建设时&#xff0c;绕不开的话题就是数仓分层。 一、数据分层的好处 1. 降低数据开发成本 通用的业务逻辑加工好&#xff0c;后续的开发任务可以基于模型快速使用&#xff0c;数据需…

IDEA使用方式

1.翻译 1.Plugins插件&#xff1a;Chinese中文插件 文件F 编辑E 视图V 导航N 代码C 分析Z 重构R 构建B 运行U 工具T VCSS 窗口W 帮助H文件N 新建N 打开 打开最近 关闭项目 设置T 项目结构 文件属性 保存全部S 从磁盘全部重新加载 作废缓存/重启 导出/导入操作 其他设置 导出 打…

windows下mysql8定时备份,bat脚本编写,dos免密执行

前提&#xff1a;mysql8已经安装。 编写脚本copy_mysql_data.bat echo off set timestamp%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2% set backupfileD:\ProgramData\MySQL\Backup\backup_%timestamp%.sql set mysqlpathD:\Program Files\MySQL\MyS…