HTTP1、 HTTP2、HTTP3 区别

news2024/12/28 12:41:47

HTTP1、 HTTP2、HTTP3 区别

  • HTTP1
    • HTTP/1.0和HTTP/1.1的区别
    • HTTP1的缺陷
  • HTTP2
    • SPDY协议
    • HTTP/2 新特性(即HTTP/2.0和HTTP/1.x的区别)
    • HTTP/2 的缺点
  • HTTP3
    • QUIC协议
    • HTTP/3 新特性(HTTP/3与HTTP/2、HTTP/1的区别)
    • 基于QUIC的0RTT是如何实现的

HTTP1

HTTP/1.0和HTTP/1.1的区别

(1)长连接
HTTP1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,并且默认使用长连接,如果加入"Connection: close ",才关闭。

短连接是指SOCKET连接后,发送接收完数据后马上断开连接。 因为连接后接收了数据就断开了,所以每次数据接受处理不会有联系。 这也是HTTP协议无状态的原因之一

(2)Host域
HTTP1.1在Request消息头里头多了一个Host(主机名)域,而且是必传的,HTTP1.0则没有这个域。

(3)消息传递
HTTP1.1增加了OPTIONS,PUT, DELETE, TRACE, CONNECT这些Request方法。

HTTP1的缺陷

HTTP1主要有以下几个缺陷:

(1)高延迟–带来页面加载速度的降低
虽然近几年来网络带宽增长非常快,然而我们却并没有看到网络延迟有对应程度的降低。网络延迟问题主要由于队头阻塞(Head-Of-Line Blocking), 导致带宽无法被充分利用。队头阻塞是指当顺序发送的请求序列中的一个请求因为某种原因被阻塞时,在后面排队的所有请求也一并被阻塞,会导致客户端迟迟收不到数据。

(2)明文传输–带来的不安全性
HTTP/1.1在传输数据时,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份,这在一定程度上无法保证数据的安全性。

HTTP2

HTTP/2是现行HTTP协议(HTTP/1.x)的替代,但它不是重写,HTTP方法/状态码/语义都与HTTP/1.x一样。HTTP/2基于SPDY,专注于性能,最大的一个目标是在用户和网站间只用一个连接(connection),该连接可以承载任意数量的双向数据流。每个数据流都以消息的形式发送,而消息又由一个或多个帧组成。多个帧之间可以乱序发送,根据帧首部的流标识可以重新组装。

SPDY协议

HTTP/1.1有两个主要的缺点:安全不足和性能不高,由于背负着 HTTP/1.x 庞大的历史包袱,所以协议的修改,兼容性是首要考虑的目标,否则就会破坏互联网上无数现有的资产。谷歌公开了自行研发的 SPDY 协议,主要解决HTTP/1.1效率不高的问题。谷歌推出SPDY,才算是正式改造HTTP协议本身。降低延迟,压缩header等等,SPDY的实践证明了这些优化的效果,也最终带来HTTP/2的诞生。
在这里插入图片描述

如上图所示,SPDY位于HTTP之下,TCP和SSL之上,这样可以轻松兼容老版本的HTTP协议(将HTTP1.x的内容封装成一种新的frame格式),同时可以使用已有的SSL功能。SPDY 协议在Chrome浏览器上证明可行以后,就被当作 HTTP/2 的基础,主要特性都在 HTTP/2 之中得到继承。

HTTP/2 新特性(即HTTP/2.0和HTTP/1.x的区别)

(1)二进制传输
HTTP/2 采用二进制格式传输数据,而非HTTP/1.x 里纯文本形式的报文 ,二进制协议解析起来更高效。

(2)Header 压缩
HTTP/2 在客户端和服务器两端建立“字典”,用索引号表示重复的字符串,可以达到50%~90%的高压缩率。

(3)用户和网站间只用一个连接
HTTP/2基于SPDY,专注于性能,最大的一个目标是在用户和网站间只用一个连接(connection),该连接可以承载任意数量的双向数据流。实现细节:每个数据流都以消息的形式发送,而消息又由一个或多个帧组成。多个帧之间可以乱序发送,根据帧首部的流标识可以重新组装。

(4)服务器推送
服务器推送(server push)指的是,还没有收到浏览器的请求,服务器就把各种资源推送给浏览器。比如,浏览器只请求了index.html,但是服务器把index.html、style.css、example.png全部发送给浏览器。这样的话,只需要一轮 HTTP 通信,浏览器就得到了全部资源,提高了性能。

HTTP/2 的缺点

TCP的队头阻塞并没有彻底解决:在HTTP/2中,多个请求是跑在一个TCP管道中的。但当出现了丢包时,HTTP/2 的表现反倒不如 HTTP/1 了。因为TCP为了保证可靠传输,有个特别的丢包重传机制,丢失的包必须要等待重新传输确认,HTTP/2出现丢包时,整个 TCP 都要开始等待重传,那么就会阻塞该TCP连接中的所有请求。而对于 HTTP/1.1 来说,可以开启多个 TCP 连接,出现这种情况反到只会影响其中一个连接,剩余的 TCP 连接还可以正常传输数据。

HTTP3

QUIC协议

Google 在推SPDY的时候就已经意识到了这些问题,于是就另起炉灶搞了一个基于 UDP 协议的“QUIC”协议,让HTTP跑在QUIC上而不是TCP上。而这个“HTTP over QUIC”就是HTTP协议的下一个大版本,HTTP/3。它在HTTP/2的基础上又实现了质的飞跃,真正“完美”地解决了“队头阻塞”问题。

HTTP/3 新特性(HTTP/3与HTTP/2、HTTP/1的区别)

QUIC基于UDP,而UDP是无连接的,根本就不需要握手和挥手,所以就比TCP来得快。此外QUIC也实现了可靠传输,保证数据一定能够抵达目的地。它还引入了多路复用机制,单个“流"是有序的,可能会因为丢包而阻塞,但其他“流”不会受到影响。

具体来说QUIC协议有以下特点:

(1)实现了类似TCP的流量控制、传输可靠性的功能
虽然UDP不提供可靠性的传输,但QUIC在UDP的基础之上增加了一层来保证数据可靠性传输。它提供了数据包重传、拥塞控制以及其他一些TCP中存在的特性。

(2)实现了快速握手功能
由于QUIC是基于UDP的,这意味着QUIC可以用最快的速度来发送和接收数据,这样可以大大提升首次打开页面的速度。

(3)集成了TLS加密功能
类似于HTTPS。

(4)多路复用,彻底解决TCP中队头阻塞的问题
和TCP不同,QUIC实现了在同一物理连接上可以有多个独立的逻辑数据流(如下图)。实现了数据流的单独传输,就解决了TCP中队头阻塞的问题。
在这里插入图片描述

基于QUIC的0RTT是如何实现的

QUIC协议依赖于合并加密和数据传输过程中的握手来创建一个安全的连接。 在连接建立成功后, 客户端会缓存起来原始的连接信息等。 在接下来与相同的服务器建立连接的过程中, 客户端能够在不增加额外RTT的情况下建立一个加密的连接,数据要发送的数据可以在握手的包中捎带着发送过去,而不用等待服务器的回复,从而实现0RTT

所以,所谓QUIC的0RTT是指在建立连接之后,后续发送数据都不需要增加额外的RTT时间,最开始的握手还是需要1RTT的时间消耗的。

RTT 是指往返时间。在计算机网络中它是一个重要的性能指标,表示从发送端发送数据开始,到发送端收到来自接收端的确认(接收端收到数据后便立即发送确认),总共经历的时延

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

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

相关文章

【Linux后端服务器开发】HTTP协议

目录 一、HTTP协议概述 二、HTTP应用层服务器实现 Util.hpp Protocal.hpp Http_Server.hpp http_server.cc indext.html 一、HTTP协议概述 请求和响应怎么保证应用层完整读取完毕了? 读取完整的一行(识别行分隔符),while&…

MobPush Android SDK 厂商推送限制

概述 厂商推送限制 每个厂商通道都有对应的厂商配额和 QPS 限制,当请求超过限制且已配置厂商回执时,MobPush会采取以下措施: 当开发者推送请求超过厂商配额时,MobPush将通过自有通道进行消息下发。当开发者推送请求超过厂商 QP…

elementui el-table 封装表格

ps: 1.3版本 案例&#xff1a; 完整代码&#xff1a; 可直接复制粘贴&#xff0c;但一定要全看完&#xff01; v-slot"scopeRows" 是vue3的写法&#xff1b; vue2是 slot-scope"scope" <template><!-- 简单表格、多层表头、页码、没有合并列行…

2023年度盘点:网络电视盒子哪个好?目前性能最好的电视盒子

挑选电视盒子时配置性能是最重要的&#xff0c;芯片、运存、存储全部会影响到我们的观影体验&#xff0c;想播放流畅、响应速度快&#xff0c;要在预算范围内选择配置最高的产品&#xff0c;那么哪些电视盒子称得上是目前性能最好的电视盒子呢&#xff1f;不懂网络电视盒子哪个…

自定义view - 玩转字体变色

自定义View步骤&#xff1a; 1>&#xff1a;values__attrs.xml&#xff0c;定义自定义属性&#xff1b; 2>&#xff1a;在第三个构造方法中获取自定义属性&#xff1b; 3>&#xff1a;onMeasure【不是必须的】&#xff1b; 4>&#xff1a;onDraw&#xff1a;绘制代…

【Java中的Thread线程的简单方法介绍和使用详细分析】

文章目录 前言一、run() 和 start() 方法二、sleep() 方法三、join() 方法总结 前言 提示&#xff1a;若对Thread没有基本的了解&#xff0c;可以先阅读以下文章&#xff0c;同时部分的方法已经在如下两篇文章中介绍过了&#xff0c;本文不再重复介绍&#xff01;&#xff01;…

海量遥感数据处理与云计算技术教程

详情点击链接&#xff1a;海量遥感数据处理与GEE云计算技术 一&#xff0c;GEE及开发平台 1.GEE平台及典型应用&#xff1b; 2.GEE JavaScript开发环境及常用数据资源&#xff1b; 3.JavaScript基础&#xff0c;包括变量&#xff0c;运算符&#xff0c;数组&#xff0c;判断及…

【数据结构和算法15】二叉树的实现

二叉树是这么一种树状结构&#xff1a;每个节点最多有两个孩子&#xff0c;左孩子和右孩子 重要的二叉树结构 完全二叉树&#xff08;complete binary tree&#xff09;是一种二叉树结构&#xff0c;除最后一层以外&#xff0c;每一层都必须填满&#xff0c;填充时要遵从先左后…

程序员千万别碰这3种副业!!!

最近&#xff0c;“消费降级”这个词频频被大家提及&#xff0c;某瓣上&#xff0c;“今天消费降级了吗”小组的常驻人口有36万&#xff0c;某书上&#xff0c;跟消费降级有关的笔记近7万条...... 不少网友晒出了自己消费降级后的生活&#xff1a;由从前每天一杯的星巴克变成了…

ROS noetic,ROS melodic 安装 MoveIt 并运行

ROS noetic&#xff0c;ROS melodic 安装 MoveIt 并运行 前言更新功能包版本下载依赖文件创建工作区和软件源下载源代码安装编译器缓存&#xff08;可选环节&#xff09;编译Moveit&#xff01;安装Moveit&#xff01;检测是否安装成功 前言 在安装过程中我也碰壁过很多次&…

[算法通关村] 1.3 链表的删除

上一节我们谈到了链表的头插、尾插、中间插入的方法&#xff0c;忘记的小伙伴可以复习一下&#xff1a; [算法通关村] 1.2 链表的插入 接下来&#xff0c;完成链表的删除工作&#xff0c;我们在上一节的学习中&#xff0c;分别在链表的开头、中间和结尾插入了节点&#xff0c;…

【USACO OPEN12铜组】岛屿

【USACO OPEN12铜组】岛屿 文章目录 【USACO OPEN12铜组】岛屿题目描述输入格式输出格式数据范围输入样例&#xff1a;输出样例&#xff1a; 思路code 2014. 岛 - AcWing题库 题目描述 每当下雨时&#xff0c;农夫约翰的田地总是被洪水淹没。 由于田地不是完全水平的&#xf…

Cesium态势标绘专题-扇形(标绘+编辑)

标绘专题介绍:态势标绘专题介绍_总要学点什么的博客-CSDN博客 入口文件:Cesium态势标绘专题-入口_总要学点什么的博客-CSDN博客 辅助文件:Cesium态势标绘专题-辅助文件_总要学点什么的博客-CSDN博客 本专题没有废话,只有代码,代码中涉及到的引入文件方法,从上面三个链…

(五)FLUX中的数据类型

以下内容来自 尚硅谷&#xff0c;写这一系列的文章&#xff0c;主要是为了方便后续自己的查看&#xff0c;不用带着个PDF找来找去的&#xff0c;太麻烦&#xff01; 第 5 章 FLUX中的数据类型 5.1 10 个基本数据类型 5.1.1 Boolean &#xff08;布尔型&#xff09; 5.1.1.1 …

Pytorch学习笔记 | 利用线性回归实现最简单的梯度下降 | 含代码和数据

代码 import torch import numpy as np import matplotlib.pyplot as plt import pandas as pddef make_linear_regression_data():x = np.linspace(start=10

IIC通讯故障纠错一例

1.问题描述 IIC在既有的工作中&#xff0c;用来协调两个外围芯片。一个芯片扩展IO&#xff0c;一个处理显示。仔细核对了IIC的种种配置&#xff0c;并且最终测量了输出的时钟和数据波形&#xff0c;最终的时钟线波形是这样的&#xff1a; 单片机master模式&#xff0c;输出前面…

ES6基础知识八:你是怎么理解ES6中Proxy的?使用场景?

一、介绍 定义&#xff1a; 用于定义基本操作的自定义行为 本质&#xff1a; 修改的是程序默认形为&#xff0c;就形同于在编程语言层面上做修改&#xff0c;属于元编程(meta programming) 元编程&#xff08;Metaprogramming&#xff0c;又译超编程&#xff0c;是指某类计算…

【Java练习题汇总】《第一行代码JAVA》异常处理篇,汇总Java练习题——异常的概念及处理标准格式(try、catch、finally、throws、throw)、断言机制 Assertion ~

Java练习题 异常处理篇 1️⃣ 异常处理篇 1️⃣ 异常处理篇 一、填空题 Throwable 下的两个子类是______________ 、______________ 。ArthmeticException 类表示______________ 异常&#xff0c; ArraysIndexOutOfBoundsException 表示______________ 异常。一个 try 代码后…

Linux内核提权漏洞(Dirty-pipe)复现

前言&#xff1a;CVE-2022-0847 是存在于 Linux内核 5.8 及之后版本中的本地提权漏洞。攻击者通过利用此漏洞&#xff0c;可覆盖重写任意可读文件中的数据&#xff0c;从而可将普通权限的用户提升到特权 root。 CVE-2022-0847 的漏洞原理类似于 CVE-2016-5195 脏牛漏洞&#xf…

Vue入门项目——WebApi

Vue入门——WebApi vue3项目搭建组合式API响应式APIreactive()ref() 生命周期钩子computed计算属性函数watch监听函数父子通信模板引用组合选项 vue3项目搭建 简单看下Vue3的优势吧 下载安装npm及node.js16.0以上版本&#xff08;确保安装成功可用如下代码检查版本&#xff0…