当前位置: 首页 > news >正文

HTTP/1.0、HTTP/1.1、HTTP/2.0区别

文章目录

  • 区别
  • HTTP/1.0
  • HTTP/1.1
    • 1. 持久连接(长连接)
    • 2. 管道化
    • 3. Host头字段
    • 4. 分块传输编码
    • 5. 缓存机制
    • 6. 请求方法
  • HTTP/2.0
    • 1. 二进制分帧
    • 2. 多路复用
    • 3. 服务器推送
    • 4. 优先级设置
    • 5. 头信息压缩
    • 6. 安全性
    • 7. 流量控制

区别

特性HTTP/1.0HTTP/1.1HTTP/2.0
连接管理非持久连接:每个请求/响应需要新的连接默认持久连接:允许多个请求/响应通过单个连接多路复用(Multiplexing),允许单个连接上并行处理多个请求/响应
请求流水线不支持支持(但受限于阻塞问题)不支持,由多路复用取代
性能较低,由于连接建立和关闭的开销较高,由于持久连接和管道化(Pipelining)最高,由于多路复用、头部压缩和服务器推送
缓存If-Modified-Since、Expires 来做为缓存判断的标准增强了缓存控制,引入了ETag、If-None-Match等增强了缓存策略,更好地支持HTTP/2.0的特性和功能
头信息压缩不支持不支持支持,使用HPACK算法进行头部压缩
服务器推送不支持不支持支持服务器主动推送资源到客户端缓存
安全性无原生安全支持无原生安全支持,但常通过HTTPS扩展实现原生支持通过TLS加密的HTTPS
二进制分帧不支持不支持支持,所有通信都被分解为小的消息和帧,能更有效地使用网络资源
消息依赖性请求/响应是严格有序的请求/响应是严格有序的请求/响应可以并行处理,不依赖于之前的请求/响应
流控制不支持不支持支持流控制,允许客户端和服务器更好地控制资源消耗和分配

HTTP/1.0

浅谈 HTTP


HTTP/1.1

HTTP/1.1是HTTP协议的一个版本,相较于HTTP/1.0,它在多个方面进行了改进和优化。

1. 持久连接(长连接)

HTTP/1.0中,每个HTTP请求都需要建立一个新的TCP连接,完成后立即断开。这种方式在大量请求时会造成很大的性能开销,因为每个连接都需要进行三次握手和四次挥手。

HTTP/1.1引入了持久连接(也称为长连接)的概念。通过在请求头中添加Connection: keep-alive字段,客户端和服务器之间可以保持一个TCP连接,用于多个请求和响应的传输 。这种方式显著减少了建立和关闭连接的次数,提高了网络资源的利用率和性能。

.

2. 管道化

管道化:客户端可以在一个持久的TCP连接上连续发送多个请求,而不需要等待上一个请求的响应,且服务器会按照请求的顺序依次返回响应。

管道网络传输是指:**可以在同一个 TCP 连接里面,客户端可以发起多个请求,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间。**但是服务器还是按照顺序回应请求。如果前面的回应特别慢,后面就会有许多请求排队等着。这称为队头堵塞。

注意:

  • 管道化同时依赖于客户端和服务器的支持。只有遵守HTTP/1.1的服务器才支持管道化。

  • 虽然管道化可以提高性能,但它也可能引发“队首阻塞”问题。

    如果前面的一个请求在服务器端处理的时间很长,生成响应需要很多时间,那么后面的请求即使已经处理完毕并生成了响应,也需要等待前面的响应发送完毕后才能发送。这会造成一定的延迟。

    HTTP/2通过引入二进制帧和多路复用的概念,以及服务器推送等功能,进一步解决了HTTP/1.1中的队首阻塞问题,并提供了更好的性能和用户体验。

.

3. Host头字段

HTTP/1.0中,由于无法确定请求的资源位于哪个主机上,因此无法实现虚拟主机。

HTTP/1.1在请求头中引入了Host字段,用于指定请求的资源所在的主机和端口号。Host 请求头字段是一个强制性的字段。

这使得一台物理服务器上可以部署多个Web站点,通过Host字段来区分不同的虚拟主机。对于支持虚拟主机(即一台服务器上托管多个域名)也至关重要。

.

4. 分块传输编码

分块传输编码:当服务器不知道响应内容的长度时,可以使用分块传输编码将响应内容分成多个块进行传输。每个块都包含一个长度字段和一个数据字段。客户端可以逐个接收这些块,直到接收到一个长度为0的块时,表示响应内容已经传输完毕。

分块传输编码允许服务器在传输过程中动态生成响应内容,而不需要提前知道整个响应的大小。这有助于处理大文件传输和动态内容生成等场景。

.

5. 缓存机制

HTTP/1.1引入了更强大的缓存机制,允许客户端和服务器缓存请求和响应的内容。通过缓存,可以减少网络传输的数据量,提高响应速度。

HTTP/1.1还提供了丰富的缓存控制指令,如Cache-ControlExpiresETag等,用于控制缓存的行为和有效性。

彻底理解浏览器的缓存机制

.

6. 请求方法

HTTP/1.1新增了以下五种请求方法:

  • OPTIONS:这个请求方法用于获取目标资源所支持的通信选项。客户端可以对特定的URL使用OPTIONS请求,以了解该URL所支持的HTTP方法。

  • PUT:PUT请求方法用于向指定资源位置上传其最新内容。通常用于更新资源。

  • DELETE:DELETE请求方法用于删除指定资源。

  • TRACE:TRACE请求方法用于回显服务器收到的请求,主要用于测试或诊断目的。

  • CONNECT:CONNECT请求方法通常用于SSL加密服务器的链接(经由非加密的HTTP代理)。这个请求方法允许客户端建立一个到由请求URI标识的资源的隧道。一旦隧道建立,客户端就可以通过隧道发送原始的字节数据,而无需考虑HTTP协议。


HTTP/2.0

1. 二进制分帧

HTTP/2 是一个二进制协议。在 HTTP/1.1 版中,报文的头信息必须是文本(ASCII 编码),数据体可以是文本,也可以是二进制。HTTP/2 则是一个彻底的二进制协议,头信息和数据体都是二进制,并且统称为"帧",可以分为头信息帧和数据帧。 帧的概念是它实现多路复用的基础。

HTTP/2.0将HTTP报文分为多个帧(Frame),以二进制方式传输,取代了HTTP 1.x中的文本格式。这使得HTTP/2.0在解析数据时更加高效,减少了处理文本数据的开销。

每个帧都包含帧的长度、类型、标志等信息,以及特定类型的数据,如HTTP首部、负荷等。这种分帧机制使得HTTP/2.0能够更灵活地处理数据,提高了传输效率。

.

2. 多路复用

多路复用:允许在同一个TCP连接上同时发送多个请求和响应,而且不用按照顺序一一发送。这解决了HTTP/1.1中的队头阻塞问题,提高了并发性能。

通过多路复用,客户端和服务器可以并行处理多个请求和响应,从而减少了等待时间,提高了网络资源的利用率。

.

3. 服务器推送

HTTP/2 允许服务器未经请求,主动向客户端发送资源,这叫做服务器推送。使用服务器推送提前给客户端推送必要的资源,这样就可以相对缩短页面加载时间。

服务器推送可以减少客户端的额外请求,降低网络延迟,提高页面加载速度。

.

4. 优先级设置

HTTP/2.0支持数据流的优先级设置,允许客户端指定请求的优先级。

服务器会根据请求的优先级来分配资源,优先处理重要的请求,从而提高了用户体验。

.

5. 头信息压缩

由于 HTTP 1.1 协议不带状态,每次请求都必须附上所有信息。所以,请求的很多字段都是重复的,比如 CookieUser Agent ,一模一样的内容,每次请求都必须附带,这会浪费很多带宽,也影响速度。

HTTP/2.0使用HPACK算法对头信息压缩进行压缩,减少了头信息压缩的数据量,节省了带宽

  • 头信息使用 gzip 或 compress 压缩后再发送

  • 客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,以后就不发送同样字段了,只发送索引号,这样就能提高速度了。

.

6. 安全性

HTTP/2.0默认使用SSL/TLS加密传输网络数据,增强了安全性。

这使得HTTP/2.0更加适用于敏感数据的传输,如在线支付、登录等场景。

.

7. 流量控制

HTTP/2.0引入了流量控制机制,允许客户端和服务器控制数据的传输速度。

这可以防止发送方发送过多的数据导致接收方缓冲区溢出,从而保证了数据传输的稳定性和可靠性。

相关文章:

HTTP/1.0、HTTP/1.1、HTTP/2.0区别

文章目录 区别HTTP/1.0HTTP/1.11. 持久连接(长连接)2. 管道化3. Host头字段4. 分块传输编码5. 缓存机制6. 请求方法 HTTP/2.01. 二进制分帧2. 多路复用3. 服务器推送4. 优先级设置5. 头信息压缩6. 安全性7. 流量控制 区别 特性HTTP/1.0HTTP/1.1HTTP/2.0…...

鸿蒙内核源码分析(文件句柄篇) | 你为什么叫句柄

句柄 | handle int open(const char* pathname,int flags); ssize_t read(int fd, void *buf, size_t count); ssize_t write(int fd, const void *buf, size_t count); int close(int fd);只要写过应用程序代码操作过文件不会陌生这几个函数,文件操作的几个关键步骤嘛,跟把大…...

2024.5.8 关于 SpringCloud —— Ribbon 的基本认知

目录 Ribbon 负载均衡原理 工作流程 Ribbon 负载均衡规则 Ribbon 负载均衡自定义化 代码方式修改规则 配置文件方式修改规则 小总结 Ribbon 设定饥饿加载 Ribbon 负载均衡原理 工作流程 order-service 使用 RestTemplate 发送请求,随后该请求将会被 Ribbon 所…...

Lua 协程模拟 Golang 的 go defer 编程模式

封装go函数用于创建并启动一个协程: ---go函数创建并启动一个协程 ---param _co_task function 函数原型 fun(_co:thread) function go(_co_task)local co coroutine.create(_co_task) -- 创建一个暂停的协程coroutine.resume(co, co) -- 调用coroutine.resume激活…...

maven的安装与配置(超详细)

在Java开发中,配置Maven环境有几个重要的原因: 依赖管理:Maven 是一个强大的依赖管理工具,它能够帮助开发人员轻松地管理项目所需的各种第三方库和组件。通过在项目的 Maven 配置文件(pom.xml)中定义依赖&…...

springCloud服务降级使用到的组件

服务降级在Spring Cloud中通常使用的组件包括断路器(Circuit Breaker)和降级处理器(Fallback)。以下是它们的概念表述: 断路器(Circuit Breaker):断路器是一种设计模式,…...

Spring框架学习-详细

文章目录 1. Spring简介1.1 面向接口编程1.2 Spring简介1.3 Spring体系结构 2 Spring IoC - 基于XML2.1 Sping框架部署(IoC)2.2 Spring IoC使用2.3 IoC和DI2.4 DI依赖注入Spring容器通过反射方法实现属性注入有三种方式1. set方法注入2. 构造器注入 2.5 …...

fatal: fetch-pack: invalid index-pack output

解决方案:git clone --depth1 要克隆的git地址 下载最近一次提交的代码 其他分支的内容都不下载 这样整体下载体量就变小了 执行命令:git clone --depth 1 https://gitlab.scm321.com/ufx/xxxx.git...

相机购买指南

佳能1000D 上市时间:2008年6月 简介: 佳能1000D具有1010万有效像素和7点宽区域自动对焦系统。DIGIC III影像处理器的应用使高ISO画质得到提升。小巧的机身和优质的成像质量可以满足初级用户对旅游便携与高画质的要求。使用了DIGIC III影像处理器&#x…...

STM32微秒级别延时--F407--TIM1

基本配置: TIM1挂载在APB2总线上,150MHz经过15分频,得到10MHz计数频率,由于disable了自动重装载,所以只需要看下一次计数值是多少即可。 void TIM1_Delay_us(uint16_t us) //使用阻塞方式进行延时,ARR值不…...

AI图书推荐:杀手级ChatGPT提示词——利用人工智能实现成功与盈利

《杀手级ChatGPT提示词——利用人工智能实现成功与盈利》(Killer ChatGPT Prompts_ Harness the Power of AI for Success and Profit )一书是作者Guy Hart-Davis关于ChatGPT的指南,ChatGPT是OpenAI开发的大语言模型。这本书提供了各种职业角…...

AI时代:低代码与人工智能引领科技创造新时代

随着科技的飞速发展,我们步入了一个崭新的时代——AI时代。在这个时代,低代码和人工智能技术如日中天,成为引领科技创造的新引擎。本文将围绕这一主题,探讨低代码和人工智能如何在各个领域发挥巨大作用,推动科技创造迈…...

1.基于python的单细胞数据预处理-降维可视化

目录 降维的背景PCAt-sneUMAP检查质量控制中的指标 参考: [1] https://github.com/Starlitnightly/single_cell_tutorial [2] https://github.com/theislab/single-cell-best-practices 降维的背景 虽然特征选择已经减少了维数,但为了可视化&#xff0…...

【快捷部署】023_HBase(2.3.6)

📣【快捷部署系列】023期信息 编号选型版本操作系统部署形式部署模式复检时间023HBase2.3.6Ubuntu 20.04tar包单机2024-05-07 注意:本脚本非全自动化脚本,有2次人工干预,第一次是确认内网IP,如正确直接回车即可&#…...

Nginx配置项详解

Nginx,以其高性能、稳定性强、资源消耗低的特性,成为众多网站和应用首选的Web服务器及反向代理服务器。其配置文件的灵活性和丰富性是其强大功能的关键所在。本文将深入解析Nginx配置文件中的核心概念与关键配置项,帮助您更好地理解和定制Ngi…...

解决iview(view ui)中tabs组件中使用图片预览组件ImagePreview,图片不显示问题

同学们可以私信我加入学习群! 正文开始 前言一、问题描述二、原因分析三、解决方案总结 前言 最近在写个人项目的web端和浏览器插件,其中一个功能是base64和图片的转换。因为分成四个小功能,所以使用的iview的tabs来展示不同功能&#xff0c…...

R2S+ZeroTier+Trilium

软路由使用ZeroTier搭建远程笔记 软路由使用ZeroTier搭建远程笔记 环境部署 安装ZeroTier安装trilium 环境 软路由硬件:友善 Nanopo R2S软路由系统:OpenWrt,使用第三方固件nanopi-openwrt。内网穿透:ZeroTier。远程笔记&…...

10 华三vlan技术介绍

AI 解析 -Kimi-ai Kimi.ai - 帮你看更大的世界 (moonshot.cn) 虚拟局域网(VLAN)技术是一种在物理网络基础上创建多个逻辑网络的技术。它允许网络管理员将一个物理网络分割成多个虚拟的局域网,这些局域网在逻辑上是隔离的,但实际…...

实现一个聊天室可发送消息语音图片视频表情包(任意文件)

文章目录 如何跑通代码仓库地址客户端登录发送消息接受消息发送文件接受文件 服务端接受消息并发送给各个客户端接受文件并发送给各个客户端 如何跑通 将手机和电脑都连自己的热点先运行服务器得到可监听的地址更新客户端安卓消息线程和文件线程的socker目标地址为可监听地址然…...

【SpringMVC 】什么是SpringMVC(一)?如何创建一个简单的springMvc应用?

文章目录 SpringMVC第一章1、什么是SpringMVC2、创建第一个SpringMVC的应用1-3步第4步第5步第6步7-8步3、基本语法1、进入控制器类的方式方式1:方式2:方式3:方式4:方式5:2、在控制器类中取值的方式方式1:方式2:方式3:方式4:方式5:方式6:超链接方式7:日期方式8:aja…...

基于 NXP + FPGA+Debian 高可靠性工业控制器解决方案

在工业系统开发中,**“稳定”**往往比“先进”更重要。设备一旦部署,生命周期动辄 5~10 年,系统重启或异常恢复成本高昂。 这时候,一套“值得托付”的软硬件组合,就显得尤为关键。 ✅ NXP —— 提供稳定、长期供货的工…...

AI IDE 正式上线!通义灵码开箱即用

近期,通义灵码AI IDE正式上线,即日起用户可在通义灵码官网免费下载开箱即用。 作为AI原生的开发环境工具,通义灵码AI IDE深度适配了最新的千问3大模型,并全面集成通义灵码插件能力,具备编程智能体、行间建议预测、行间…...

Python的浅拷贝与深拷贝

一、浅拷贝 浅拷贝,指的是重新分配一块内存,创建一个新的对象,但里面的元素是原对象中各个子对象的引用。 浅拷贝有几种方法: 1、 使用数据类型本身的构造器 list1[1,2,3]list2 list(list1) # 使用了数据类型本身的构造器 list…...

Java 2D 图形类总结与分类

一、基本形状类 这些类用于绘制简单的标准几何形状。 1. 圆形 / 椭圆类 Ellipse2D:椭圆基类,支持浮点精度。 子类: Ellipse2D.Double:双精度浮点坐标。Ellipse2D.Float:单精度浮点坐标。 参数:x, y, wid…...

【HarmonyOS 5】出行导航开发实践介绍以及详细案例

以下是 ‌HarmonyOS 5‌ 出行导航的核心能力详解(无代码版),聚焦智能交互、多端协同与场景化创新: 一、交互革新:从被动响应到主动服务 ‌意图驱动导航‌ ‌自然语义理解‌:用户通过语音指令(如…...

Neovim - 常用插件,提升体验(三)

文章目录 nvim-treelualineindent-blanklinetelescopegrug-far nvim-tree 官方文档:https://github.com/nvim-tree/nvim-tree.lua 以前我们都是通过 :e 的方式打开一个 buffer,但是这种方式需要记忆文件路径,因此这里可以通过 nvim-tree 插…...

2025五大免费变声器推荐!

在游戏开黑时想靠声音搞怪活跃气氛,或是在直播中用独特声线吸引观众,又或者给视频配音时想尝试不同角色 —— 但市面上的变声软件要么收费高昂,要么效果生硬、操作复杂,难道找到一款好用又免费的变声器真的这么难? 今…...

Go语言爬虫系列教程5:HTML解析技术以及第三方库选择

Go语言爬虫系列教程5:HTML解析技术以及第三方库选择 在上一章中,我们使用正则表达式提取网页内容,但这种方法有局限性。对于复杂的HTML结构,我们需要使用专门的HTML解析库。在这一章中,我们将介绍HTML解析技术以及如何…...

C++.OpenGL (5/64)变换(Transformation)

变换(Transformation) 变换矩阵核心概念 #mermaid-svg-OvPP9vqkY9MRAHyd {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-OvPP9vqkY9MRAHyd .error-icon{fill:#552222;}#mermaid-svg-OvPP9vqkY9MRAHyd .error-tex…...

jenkins结合gitlab实现CI

Jenkins结合GitLab实现CI(持续集成) 持续集成(Continuous Integration, CI)是一种软件开发实践,开发者在代码提交后,系统会自动进行构建、测试,从而尽早发现问题。Jenkins和GitLab的结合可以高效…...