计算机网络-HTTP相关知识-HTTP的发展

HTTP/1.1

特点:

  • 简单:HTTP/1.1的报文格式包括头部和主体,头部信息是键值对的形式,使得其易于理解和使用。
  • 灵活和易于扩展:HTTP/1.1的请求方法、URL、状态码、头字段等都可以自定义和扩展,使得其具有很高的灵活性。同时,其下层(如SSL/TLS,TCP/UDP)也可以随意变化。
  • 跨平台表现良好:HTTP/1.1可以在各种操作系统和硬件平台上运行。
  • 无状态:HTTP/1.1是无状态的,这意味着服务器不需要存储关于客户端的信息。这减轻了服务器的负担,但也意味着每次进行关联操作时都需要进行身份验证。为了解决这个问题,服务器可以存储Cookie来记录上次访问的信息。
  • 长连接:HTTP/1.1支持长连接,即一次握手后可以进行多次请求-响应。
  • 支持管道网络传输:虽然默认关闭,但HTTP/1.1支持管道网络传输,即发送第一个请求后无需等待响应就可以继续发送请求,但响应需要按顺序进行。如果前面的响应时间过长,可能会造成队头阻塞。

优化方法:

  • 启用缓存:通过启用缓存,可以减少请求次数,从而提高效率。
  • 减少重定向:重定向可能会导致额外的请求和响应,增加了延迟。如果存在代理服务器,可以让代理服务器直接发送新的URL请求,从而减少重定向的影响。
  • 合并请求:由于HTTP/1.1默认关闭管道,可能会发生队头阻塞。通过合并请求,可以减少重复的HTTP头部和TCP连接过程。具体方法包括将多个小图片合并成大图片,使用webpack等打包工具,或者将图片数据用base64编码嵌入到HTML中。
  • 延迟请求:在同一页面中,可以在用户需要时(如图片)再发送请求,从而减少不必要的请求。
  • 压缩:可以使用无损压缩(如gzip、Brotli)来压缩文本和源代码,或者使用有损压缩(如Google的WebP格式)来压缩视频和图片,从而减少传输的数据量。

HTTP/2.0

  • 兼容性:HTTP/2.0在语义层面上兼容HTTP/1.1,这意味着所有基于HTTP/1.1的应用都可以在HTTP/2.0上运行。但在语法方面,HTTP/2.0进行了一些升级和改进,以提高性能和效率。
  • 头部压缩:HTTP/2.0引入了HPACK算法进行头部压缩,解决了HTTP/1.1中只能对body进行压缩的问题。HPACK算法包括静态字典、Huffman编码和动态字典三部分。静态字典包含常用的字段和字段值,用数字代替。Huffman编码则是根据字符出现的频率进行二进制编码。动态字典则是在通信过程中,根据实际的头部字段动态生成的。
  • 二进制帧: HTTP/2.0引入了二进制分帧层,这是一个新的抽象层,位于应用层和传输层之间。在这个层次上,HTTP消息被分解为多个较小的消息和帧,然后进行交互。这种设计使得HTTP/2.0可以更有效地利用网络资源,提高传输效率。
    每个帧都包含以下部分:

    • 帧头:包括帧长度(表示帧数据的长度)、帧类型(定义帧的类型,如数据帧或头部帧)、标志位(提供帧相关的特定信息)和流标识符(唯一标识一个流)。
    • 帧负载:帧的主体部分,包含由帧头描述的数据。
  • 并发传输:HTTP/2.0支持多个Stream复用一个TCP连接,每个HTTP请求与响应都在同一个Stream中进行,一个HTTP消息可以由多个Frame构成,一个Frame可以由多个TCP报文构成。
    并发传输的特点:
    • 不同Stream的帧可以乱序发送:在一个TCP连接中,来自不同Stream的帧可以乱序发送,通过Stream ID来区分属于哪个Stream。
    • 同一Stream内部的帧必须是严格有序的:在一个Stream中,帧的发送和接收必须是有序的,保证了消息的完整性和正确性。
    • 双方都可以建立Stream:在一个TCP连接中,客户端和服务端都可以建立Stream,客户端的Stream ID为奇数,服务端的Stream ID为偶数。
    • 同一个连接中的Stream ID不能复用:在一个TCP连接中,每个Stream ID只能被使用一次,当所有的Stream ID都被使用完后,需要发送GOAWAY帧来断开连接。
    • 支持服务端主动推送:例如,当客户端请求一个HTML文件时,服务端可以主动推送与该HTML文件相关的CSS文件,这可以减少客户端的请求次数,提高加载速度。

HTTP/3.0

  • 使用UDP + QUIC代替TCP:HTTP/3.0使用UDP + QUIC来代替TCP,解决了TCP的固有问题,如队头阻塞、握手延迟等。
  • 帧结构:HTTP/3.0的帧结构与HTTP/2.0相同,都采用二进制帧。由于流控制使用QUIC协议,帧头选用帧类型和数据长度两个字段。这种结构使得HTTP/3.0可以更有效地利用网络资源,提高传输效率。
  • 头部压缩使用QPACK:HTTP/3.0的头部压缩使用QPACK,类似于HPACK,但进行了一些改进,如静态字典扩大,使用QUIC特殊的两个单向流来同步动态表。这种设计使得HTTP/3.0的头部压缩更加高效。
  • 无队头阻塞:HTTP/3.0通过给每个数据包赋予唯一标识,解决了HTTP/2.0中某个流的包丢失会影响整个TCP的问题。这种设计使得HTTP/3.0在面对网络丢包时,可以更快地恢复传输。
  • 更快的连接建立:HTTP/3.0通过连接ID来实现,并且QUIC中包含了TLS1.3,在QUIC握手的同时进行TLS握手,从而实现更快的连接建立。这种设计使得HTTP/3.0在建立连接时,可以更快地开始数据传输。
  • 连接迁移:HTTP/3.0使用连接ID来标记通信的两个端点,即使断开连接,只要仍保有上下文信息,就可以直接复用连接,解决了HTTP/2.0中网络切换需要重新连接的问题。这种设计使得HTTP/3.0在面对网络环境变化时,可以更快地恢复传输。

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

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

相关文章

【Android、 kotlin】kotlin学习笔记

基本语法 fun main(){val a2var b "Hello"println("$ (a - 1} $b Kotlin!")} Variables 只赋值一次用val read-only variables with val 赋值多次用var mutable variables with var Standard output printin() and print() functions String templ…

蓝桥杯第793题——排水系统

题目描述 对于一个城市来说,排水系统是极其重要的一个部分。 有一天,小 C 拿到了某座城市排水系统的设计图。排水系统由 n 个排水结点(它们从 1∼n 编号)和若干个单向排水管道构成。每一个排水结点有若干个管道用于汇集其他排水…

分布式链路追踪与云原生可观测性

分布式链路追踪系统历史 Dapper, a Large-Scale Distributed Systems Tracing Infrastructure - Google Dapper,大规模分布式系统的跟踪系统大规模分布式系统的跟踪系统:Dapper设计给我们的启示 阿里巴巴鹰眼技术解密 - 周小帆京东云分布式链路追踪在金…

Node.js环境调用百度智能云(百度云)api鉴权认证三步走

方式一 :Postman脚本的方式生成v1版本的认证字符串 Postman脚本下载 下载Postman pre-request Script 设置 Authorization 示例脚本 方式二:在线签名工具生成 (试用于验证编程字符串签名是否有错误) 签名计算工具 https://cloud.baidu.com/signature/index.html …

Acrel-1000DP光伏监控系统在尚雷仕(湖北)健康科技有限公司5.98MW分布式光伏10KV并网系统的应用

摘 要:分布式光伏发电特指在用户场地附近建设,运行方式多为自发自用,余电上网,部分项目采用全额上网模式。分布式光伏全额上网的优点是可以充分利用分布式光伏发电系统的发电量,提高分布式光伏发电系统的利用率。发展分…

C++ //练习 11.3 编写你自己的单词计数程序。

C Primer(第5版) 练习 11.3 练习 11.3 编写你自己的单词计数程序。 环境:Linux Ubuntu(云服务器) 工具:vim 代码块 /*************************************************************************> …

拾光坞N3 ARM 虚拟主机 i茅台项目

拾光坞N3 在Dcoker部署i茅台案例 OS:Ubuntu 22.04.1 LTS aarch64 cpu:RK3566 ram:2G 部署流程——》mysql——》java8——》redis——》nginx mysql # 依赖 apt update apt install -y net-tools apt install -y libaio* # 下载mysql wg…

JavaBean是什么?

Bean的本意为豌豆、子实,在这里引申为一种实体。JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性&#xff0…

鸿蒙南向开发实战:【智能窗帘】

样例简介 智能窗帘设备不仅接收数字管家应用下发的指令来控制窗帘开启的时间,而且还可以加入到数字管家的日程管理中。通过日程可以设定窗帘开关的时间段,使其在特定的时间段内,窗帘自动打开或者关闭;通过日程管家还可以实现窗帘…

基础篇3 浅试Python爬虫爬取视频,m3u8标准的切片视频

浅试Python爬取视频 1.页面分析 使用虾米视频在线解析使用方式:https://jx.xmflv.cc/?url目标网站视频链接例如某艺的视频 原视频链接 解析结果: 1.1 F12查看页面结构 我们发现页面内容中什么都没有,video标签中的src路径也不是视频的数据。 1.2 …

VUE运行项目后,只有local地址,没有network地址(添加nerwork地址)

使用前 使用后 解决方案 1.找到build文件夹下的webpack.dev.conf.js文件,更改messages中的内容 devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({compilationSuccessInfo: {messages: [App running: ,Local: http://${devWebpackConfig.devServer.hos…

【前端Vue】社交信息头条项目完整笔记第3篇:三、个人中心,TabBar 处理【附代码文档】

社交媒体-信息头条项目完整开发笔记完整教程(附代码资料)主要内容讲述:一、项目初始化使用 Vue CLI 创建项目,加入 Git 版本管理,调整初始目录结构,导入图标素材,引入 Vant 组件库,移动端 REM 适配。二、登录注册准备,实现基本登录功能,登录状…

ObjectiveC-08-OOP面向对象程序设计-类的分离与组合

本节用一简短的文章来说下是ObjectiveC中的类。类其实是OOP中的一个概念,概念上简单来讲类是它是一组关系密切属性的集合,所谓的关系就是对现实事物的抽象。 上面提到的关系包括很多种,比如has a, is a,has some等&…

交互设计师、UI设计师、视觉设计师面试作品集包装模板figma源文件

页面数量:19页 页面尺寸:1920*1080PX 交付格式:figma 赠送文件:24款高质量样机 交付文件:作品集模板源文件、作品集包装psd源文件、作品集所用字体文件 该作品集虽然只有19页,但可根据需求复制作品集里已有…

offsetof宏定义的使用和模拟实现详解

目录 一.offsetof宏定义的使用二.offsetof宏的模拟实现三.总结 一.offsetof宏定义的使用 offsetof的第一个参数是数据类型(结构体或联合体),第二个参数是偏移量 (offsetof用于计算结构体和联合体的偏移量) 返回值的类型是size_t(无…

Spring Cloud微服务入门(二)

微服务的技术栈 服务治理: 服务注册、发现、调用。 负载均衡: 高可用、集群部署。 容错: 避免雪崩、削峰、服务降级。 消息总线: 消息队列、异步通信,数据一致性。 网关: 校验路径、请求转发、服务集成…

Golang 开发实战day07 - Functions

Golang 教程07 - Functions 1. Functions 1.1 什么是函数? 在 Golang 中,函数就像是代码的超级组合体,可以将一段代码封装成一个独立的单元,以便重复使用。 1.2 函数声明 func funcName(parameter1 type1, parameter2 type2)…

利用sqoop实现sql表数据导入到Hadoop

1.在开发这创建好sql表后,开始执行下面步骤 2.sqoop的安装路径,我这里放在以下位置 3. 进入到option2脚本中,下面是脚本里的内容 下面四点要根据情况随时更改: 1>jdbc:mysql://node00:3306/数据库名 2>sid,sname->前…

网站如何运用百度文心一言API进行AI内容创作?

网站如何运用百度文心一言API进行AI内容创作? 当我们做好一个网站的时候会因为创作内容而发愁,随着chatgpt的出现,内容创作已经不再是什么困难的事情,但是由于gpt是国外的,在国内使用有诸多不便,因此我们今…

数据结构—堆

什么是堆 堆是一种特殊的树形结构,其中每个节点都有一个值。堆可以分为两种类型:最大堆和最小堆。在最大堆中,每个节点的值都大于等于其子节点的值;而在最小堆中,每个节点的值都小于等于其子节点的值。这种特性使得堆…