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.py

from http.server import BaseHTTPRequestHandler, HTTPServer

class MyHTTPRequestHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)  # 设置响应状态码为200
        self.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/2
    
            ssl_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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【动手学深度学习】pytorch-参数管理

pytorch-参数管理 概述 我们的目标是找到使损失函数最小化的模型参数值。 经过训练后&#xff0c;我们将需要使用这些参数来做出未来的预测。 此外&#xff0c;有时我们希望提取参数&#xff0c;以便在其他环境中复用它们&#xff0c; 将模型保存下来&#xff0c;以便它可以在…

回归预测 | MATLAB实现WOA-CNN鲸鱼算法优化卷积神经网络的数据多输入单输出回归预测

回归预测 | MATLAB实现WOA-CNN鲸鱼算法优化卷积神经网络的数据多输入单输出回归预测 目录 回归预测 | MATLAB实现WOA-CNN鲸鱼算法优化卷积神经网络的数据多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 回归预测 | MATLAB实现WOA-CNN鲸鱼算法优化卷积…

matlab重名函数调用踩坑记录

我新安装了matlab的robotics toolbox&#xff0c;然而调用的rotx不是我想要的函数。 我上网查了一下资料&#xff0c;知乎和csdn有相关的回答&#xff0c;但是我试了一下还是不行。它们的方法是移除路径再添加路径避免函数的冲突。相关方法放在文末的相关参考1 2。这里建议先用…

上门服务小程序|上门家政小程序开发

随着现代生活节奏的加快和人们对便利性的追求&#xff0c;上门家政服务逐渐成为了许多家庭的首选。然而&#xff0c;传统的家政服务存在着信息不透明、服务质量不稳定等问题&#xff0c;给用户带来了困扰。为了解决这些问题&#xff0c;上门家政小程序应运而生。上门家政小程序…

Zookeeper集群

Zookeeper集群 一、Zookeeper 概述Ⅰ、Zookeeper 定义&#xff1a;Ⅱ、Zookeeper 工作机制Ⅲ、Zookeeper 特点Ⅳ、Zookeeper 数据结构Ⅴ、Zookeeper 应用场景Ⅵ、Zookeeper 选举机制 二、部署 Zookeeper 集群Ⅰ、安装前准备Ⅱ、安装Zookeeper 三、部署kafka 集群Ⅰ、下载安装包…

设计模式07-责任链模式

责任链模式属于行为设计模式&#xff0c;常见的过滤器链就是使用责任链模式设计的。 文章目录 1、真实开发场景的问题引入2、责任链模式讲解2.1 核心类及类图2.2 基本代码 3、利用构建者模式解决问题4、责任链模式的应用实例5、总结5.1 解决的问题5.2 使用场景5.3 优缺点 1、真…

【观察】杉数科技:释放智能决策“乘数效应”,驱动智能制造高质量增长

毫无疑问&#xff0c;中国制造业在时代背景与国家政策的双重驱动下&#xff0c;正加速向数智化转型&#xff0c;而以数据驱动的智能决策也正成为制造业资源优化配置的“利器”&#xff0c;通过端到端的数据深度感知与决策优化&#xff0c;显然能够将工业和制造业的数据价值发挥…

RT-Thread 学习-Env开发环境搭建(一)

Env是什么 Env 是 RT-Thread 推出的开发辅助工具&#xff0c;针对基于 RT-Thread 操作系统的项目工程&#xff0c;提供编译构建环境、图形化系统配置及软件包管理功能。 其内置的 menuconfig 提供了简单易用的配置剪裁工具&#xff0c;可对内核、组件和软件包进行自由裁剪&…

C++基础算法离散化及区间合并篇

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;C算法 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 主要讲解了双指针&#xff0c;位运算&#xff0c;离散化以及区间合并。…

02 QPushButton的基本使用

Tips: 在使用控件的时候如果没有智能提示&#xff0c;可能是没有包含头文件 在运行时&#xff0c;报【invalid use of xxx】可能是没有包含相关头文件 如果出现中文乱码&#xff1a;设置编译器的编码格式为UTF-8 本节主要包含创建一个按钮控件、显示按钮、设置按钮的父窗口、设…

2023最新ChatGPT商业运营网站源码+支持ChatGPT4.0+新增GPT联网功能+支持ai绘画+实时语音识别输入+用户会员套餐+免费更新版本

2023最新ChatGPT商业运营网站源码支持ChatGPT4.0新增GPT联网功能支持ai绘画实时语音识别输入用户会员套餐免费更新版本 一、AI创作系统二、系统程序下载三、系统介绍四、安装教程五、主要功能展示六、更新日志 一、AI创作系统 提问&#xff1a;程序已经支持GPT3.5、GPT4.0接口…

SpringBoot——自动装配之@Import

文章目录 前言ImportImport 的作用1、Import(MyDemo1.class) 将某个对象加载至bean容器中2、Import一个类 该类实现了ImportSelector, 重写selectImports方法该方法返回了String[]数组的对象&#xff0c;数组里面的类都会注入到spring容器当中3、Import一个类&#xff0c;该类实…

解放研究者:GPT自动化科研

GPT Researcher 是一个自主代理程序&#xff0c;旨在进行多种任务的全面在线研究。 该代理能够生成详细、事实性和公正的研究报告&#xff0c;并提供个性化选项&#xff0c;以便关注相关资源、大纲和教训。受到AutoGPT和最近的Plan-and-Solve论文的启发&#xff0c;GPT Researc…

图像标注是什么?及其类型和应用

什么是图像标注&#xff1f; 图像标注是与您交互的许多人工智能产品的基础&#xff0c;并且是计算机视觉&#xff08;CV&#xff09;领域重要的过程之一。在图像标注过程中&#xff0c;数据标注员使用标签或元数据来标记AI模型学习识别的数据特征。然后&#xff0c;这些图像标…

线程池学习(六)线程池状态转化

线程池状态定义 // runState is stored in the high-order bits // 线程池创建之后的初始状态&#xff0c;这种状态下可以执行任务private static final int RUNNING -1 << COUNT_BITS; // 线程池不再接收新的任务&#xff0c;但是会将队列中的任务执行完 private s…

解决apkanalyzer.bat could NOT be found in D:\Download\Android SDK Tools!警告报错

appium安装过程中很可能出现以下警告报错&#xff0c;咱就按如下操作即可搞定&#xff01;&#xff01;&#xff01; apkanalyzer.bat could NOT be found in D:\Download\Android SDK Tools! 一、下载Command line tools 下载地址&#xff1a;​https://developer.android.g…

Jenkins (一)

Jenkins (一) Docker Jenkins 部署 一. 安装 jenkins $ mkdir -p /home/tester/data/docker/jenkins $ vim jenkins:lts-jdk11.sh./jenkins:lts-jdk11.sh 内容 #! /bin/bash mkdir -p /home/tester/data/docker/jenkins/jenkins_homesudo chown -R 1000:1000 /home/tester/da…

基于simulink的DPLL仿真笔记

该笔记主要用于本人思路整理与记录 本设计运用的是电荷泵一阶环路滤波器&#xff0c;二阶三阶则在此基础上举一反三&#xff0c;以后如有机会会慢慢补全 文章目录 一.仿真模型PS&#xff08;题外话&#xff09; 二.仿真结果三.环路滤波器分析1. 环路滤波器对比LPF2. 环路滤波器…

从零开发短视频电商 单元测试(TestNG)

文章目录 简介简单示例执行测试并查看测试报告方式一 在IDEA中运行testng.xml文件方式二 在IDEA中运行测试类或者package方式三 在Maven中运行测试 统计测试覆盖率方式一 IDEA 支持详细的代码测试覆盖率统计方式二 Maven支持测试覆盖率 在IDEA中创建测试用例使用 IDEA 快速创建…

ELK搭建

ELK介绍&#xff1a; ELK是一组开源工具的缩写&#xff0c;它由Elasticsearch、Logstash和Kibana三个组件组成&#xff0c;用于处理、分析和可视化大量日志数据。 入门级ELK搭建&#xff08;无Docker环境&#xff09; 安装前准备 1.获取安装包 https://artifacts.elastic…