全面探讨HTTP协议从0.9到3.0版本的发展和特点

前言:
最近的几场面试都问到了http的相关知识点,博主在此结合书籍和网上资料做下总结。本篇文章讲收录到秋招专题,该专栏比较适合刚入坑Java的小白以及准备秋招的大佬阅读。

如果文章有什么需要改进的地方欢迎大佬提出,对大佬有帮助希望可以支持下哦~

小威在此先感谢各位小伙伴儿了😁

在这里插入图片描述

以下正文开始

在这里插入图片描述

文章目录

  • HTTP 0.9
  • HTTP 1.0
  • HTTP 1.1
  • HTTP/2
  • HTTP/3
  • 本篇总结

HTTP 0.9

谈到HTTP,首先能想到的就是它的基础版,也是最先发布的版本。

HTTP 0.9版本出现在1991年,这个版本的主要特点是简单和原始,它只支持简单的请求-响应模式,不支持复杂的HTTP头部和消息体。此外,HTTP 0.9不支持持久连接,每个请求都需要建立一个新的连接。因为有了这些限制,So,HTTP 0.9已经不再被广泛使用。

HTTP 1.0

HTTP 1.0是继0.9版本后的丰富版,也是HTTP的第二个版本。

HTTP 1.0是在1996年发布的,它对HTTP 0.9进行了重要的改进。

HTTP 1.0引入了更多的特性和功能,比如支持更复杂的HTTP头部、消息体和请求方法(如GET和POST),以及持久连接。这些改进使得HTTP 1.0能够更好地支持Web开发,为我们的应用所用。

HTTP 1.0的一个主要限制的就是它的性能问题。由于每个请求都需要建立一个新的连接,并且每个连接只能处理一个请求,因此HTTP 1.0在处理大量并发请求时可能会变得非常慢。为了解决这个问题,后来引入了HTTP 1.1和持久连接。

HTTP 1.1

前面说到1.0的不足,现在我们再来聊聊1.1版本的特点,这块也是面试中经常问到的。

HTTP 1.1于1997年发布,这个版本引入了更多的特性和功能,以改善Web性能和可用性。其中最重要的改进是引入了持久连接。

持久连接允许客户端和服务器保持一个或多个打开的连接,以便在多个请求和响应之间重用它们。这可以减少建立连接所需的资源和时间,提高请求处理速度和并发性。除此之外,HTTP 1.1还引入了分块传输编码,允许在不知道内容长度的情况下发送响应体。

另一个重要的改进是引入了缓存。HTTP 1.1提供了几种缓存机制,包括条件请求和实体标签 ,以减少不必要的网络传输和提高响应速度。除此之外,HTTP 1.1还引入了其他一些功能,如范围请求和管道化。

在这里插入图片描述

HTTP/2

HTTP/2是HTTP的高效版,相较于HTTP/1有很大改进,

HTTP 1.1相比HTTP 1.0有了很大的改进,但它仍然存在一些性能和安全问题。为了解决这些问题,HTTP/2于2015年发布。HTTP/2引入了一些关键的改进,包括二进制传输、头压缩、多路复用和服务器推送等。

  1. 二进制传输:HTTP/2使用二进制协议而不是文本协议,这使得传输更加高效和可靠。二进制协议更加紧凑,易于解析和处理。
  2. 头压缩:HTTP/2引入了头压缩机制,使用Huffman编码对HTTP头部进行压缩。这可以减少头部的大小和传输时间,提高请求处理速度。
  3. 多路复用:HTTP/2引入了多路复用机制,允许在同一个连接上同时发送多个请求和响应。这可以减少阻塞和等待时间,提高并发性和性能。
  4. 服务器推送:HTTP/2允许服务器向客户端推送资源,而无需客户端明确请求它们。这可以减少延迟和提高响应速度。

HTTP/3

HTTP/3是现代版,也是目前HTTP的最强版本,是现代互联网的版本之子
尽管HTTP/2相比HTTP 1.1有了很大的改进,但它仍然基于TCP协议,而TCP协议在某些场景下可能存在性能瓶颈和安全问题。为了解决这些问题,HTTP/3于2019年发布。HTTP/3是基于QUIC协议的,它是一种新型的传输层协议,具有更好的性能和安全性。

QUIC协议使用的是UDP而不是TCP作为传输层协议。与TCP不同,UDP不需要三次握手建立连接,并且可以在不等待确认的情况下发送数据。这使得QUIC具有更低的延迟和更高的吞吐量。此外,QUIC使用TLS 1.3加密通信,提供了更好的安全性。

本篇总结

从HTTP 0.9到HTTP/3,HTTP协议经历了多个版本的演进和改进。这些版本在支持Web发展方面发挥了重要作用,并解决了不同时期面临的挑战和问题。

从简单的文本协议到高效的二进制协议,从单一的请求-响应模式到支持多路复用和服务器推送等先进特性,HTTP协议不断适应着互联网的发展需求和技术进步。当前最新版本的HTTP/3基于QUIC协议提供了更好的性能和安全性,将继续在未来的Web发展中发挥关键作用。

同时也祝愿各位小伙伴儿在面试的过程中这块知识点答得都对,看完全会!

文章到这里就先结束了,感兴趣的可以订阅专栏哈,后续会继续分享相关的知识点。

在这里插入图片描述

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

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

相关文章

Ubuntu安装Vmtools (最新安装教程)

Ubuntu安装Vmtools 1. 设置root用户密码2. 切换root用户3. 安装vmools 1. 设置root用户密码 出现认证失败(Authentication failure)的原因有两种,要么是密码输入错误,要么是新安装的系统还没有给root设置密码,&#x…

NX二次开发UF_CURVE_ask_line_data 函数介绍

文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_ask_line_data Defined in: uf_curve.h int UF_CURVE_ask_line_data(tag_t line, UF_CURVE_line_p_t line_coords ) overview 概述 Returns the coordinates of a line w…

js基础知识

1. beforeCreate 初始化界面前 : 在当前阶段data、methods、computed以及watch上的数据和方法都不能被访问。 2. created 初始化界面后 : 在实例创建完成后发生,当前阶段已经完成了数据观测,也就是可以使用数据,更改数据,在这里更…

7天用Go实现Web框架Gee教程

本文是学习模仿自https://geektutu.com/post/gee.html 在此基础上,加入自己的学习过程与理解 框架 设计框架之前,需要知道为什么需要使用框架,框架能解决什么问题。只有明白了这一点,才能设计出框架中的功能。 通俗来讲&#…

基于springboot实现实习管理系统的设计与实现项目【项目源码+论文说明】

基于sprinmgboot实现实习管理系统的设计与实现演示 摘要 随着信息化时代的到来,管理系统都趋向于智能化、系统化,实习管理也不例外,但目前国内仍都使用人工管理,市场规模越来越大,同时信息量也越来越庞大,…

Unity 关于Input类的使用

Input类在我们游戏开发中需要获取外设设备(比如键盘、鼠标、游戏手柄等)进行交互时,基本都会用到。 它主要有以下一些常用的方法。 1、GetKey(KeyCode key),检测按键是否被按下; 2、GetKeyDown(KeyCode key)&#x…

ubuntu2204 防火墙ufw限制某ip对某端口的访问

公司内部有个ip为10.10.10.1的网关,每天定时端口扫描,然后扫描发送的数据包http server解析不了,日志里就会记录这个错误,有点烦, 用防火墙过滤一下 ubuntu的防火墙命令是 ufw, 跟ufo挺像的,也…

基于helm的方式在k8s集群中部署gitlab - 升级(三)

接上一篇 基于helm的方式在k8s集群中部署gitlab - 部署(一),本篇重点对gitlab在k8s集群中进行升级 文章目录 1. gitlab 升级1.1 获取release1.2 下载目前版本的gitlab charts1.3 获取当前的values文件1.4 升级 2. gitlab数据库升级2.1 备份数…

SSRF漏洞防御:黑白名单的编写

文章目录 SSRF漏洞防御:黑白名单的编写黑名单的制作白名单的制作 SSRF漏洞防御:黑白名单的编写 以pikachu靶场中SSRF(crul)为例我们可以看到未做任何防御 我们查看源代码 黑名单的制作 思路: 什么内容不能访问 构造代码 $xyarray("file" > "",&q…

rdf-file:读写示例

<dependency><groupId>com.alipay.rdf.file</groupId><artifactId>rdf-file-core</artifactId><version>2.2.10</version> </dependency>一&#xff1a;读 一&#xff1a;写 写文件之正常写 协议布局模板 使用内置的布局文…

关于一个类中引用两外一个类中的变量和方法,一个技巧可以提高开发效率

import static com.xx.xx.util.ext.xx.toJson; import static com.xx.xx.util.ext.smf.Cert.certMgrClient; 第一个引用一个方法&#xff0c;第二个引用一个变量&#xff0c; 引用后就可以直接通过变量名或者方法名就行使用&#xff0c;很方便&#xff0c;不要通过class.方式调…

maven中scope和optional区别

文章目录 1. Scope&#xff08;作用范围&#xff09;&#xff1a;2. Optional&#xff08;可选项&#xff09;&#xff1a; 1. Scope&#xff08;作用范围&#xff09;&#xff1a; Maven的<scope>元素用于指定依赖项的作用范围&#xff0c;即依赖项在构建和运行时的可见…

【人工智能】它正在悄悄改变我的学习与生活,并试图改变我的全部!

前言 人工智能对我们的生活影响有多大&#xff1f;作为一名计算机研一的学生&#xff0c;一开学&#xff0c;学习使用ChatGTP便是我的第一个堂课。&#xff08;主要用于做作业&#x1f602;&#xff09; 我的本科毕业论文是在计算机视觉&#xff08;CV&#xff09;方向进行的…

bmp文件操作和详解

一 BMP文件格式 BMP&#xff08;Bitmap&#xff09;是Windows操作系统中的标准图像文件格式。 由于windows操作系统的发布时机远早于Linux、Android、IOS等操作系统&#xff0c;因此windows中很多数据格式和算法的标准也是当今所有操作系统必须要兼容的标准数据结构和算法。BM…

ubuntu下载vscode并运行程序

如有帮助点赞收藏关注&#xff01; 如需转载&#xff0c;请注明出处&#xff01; 好久没有在linux下编译c代码了&#xff0c;由于换了酷炫彩灯的电脑。又要重新安装一次喽。做个记录&#xff0c;可以帮助到有需要的人&#xff0c;接下来不要错过每一个步骤。 我们一起手把手运行…

虹科方案 | 如何破解CAN与车载以太网之间数据传输和协议转换的难题?

导读&#xff1a;在车辆网络时代&#xff0c;数据传输和协议转换在通信领域中扮演着至关重要的角色。它们不仅能够实现车辆内部系统之间的互联互通&#xff0c;还支持车辆与外部网络进行通信&#xff0c;从而为驾驶者带来更智能、便捷的驾驶体验。本文将介绍CAN总线与车载以太网…

3.数据结构

3.1 数据结构分类 常见的数据结构包括数组、链表、栈、队列、哈希表、树、堆、图&#xff0c;它们可以从“逻辑结构”和“物理结构”两个维度进行分类。 3.1.1逻辑结构&#xff1a;线性与非线性 逻辑结构揭示了数据元素之间的逻辑关系。在数组和链表中&#xff0c;数据按照…

大公司为什么喜欢centos系统写爬虫?

CentOS是一个基于Red Hat Enterprise Linux&#xff08;RHEL&#xff09;源代码构建的开源操作系统&#xff0c;它受到大企业喜欢大多数因为他系统的稳定性&#xff0c;安全性以及兼容性等。可以为企业提供更多的商业支持。以我个人为例&#xff0c;公司在做爬虫数据抓取多是采…

element-ui 中 el-select 组件选择后不会自动关闭

在使用 el-select 组件时&#xff0c;打开 select 选择框后选择或点击其他元素后不会自动关闭 el-select 框的问题。 我们只需要将在操作后手动让 el-select 失去焦点即可收起下拉框。 <el-select v-model"value1" ref"selectRef" multiple placehold…

位操作/位运算

常用操作一&#xff1a; n 的二进制表示中第 k 位&#xff08;从0位开始算&#xff09;是几 基本思路 先把 n 第 k 位数字移到最后一位&#xff0c;用右移运算 n>>k看个位数字是几&#xff0c;其实就是 x & 1 实际就是&#xff1a;n>>k&1 //最低为从0…